diff --git a/ChangeLog b/ChangeLog
index 310fbc8..0add868 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,457 @@
-=== release 1.10.1 ===
+=== release 1.10.2 ===
 
-2016-11-17  Sebastian Dröge <slomo@coaxion.net>
+2016-11-29  Sebastian Dröge <slomo@coaxion.net>
 
 	* configure.ac:
-	  releasing 1.10.1
+	  releasing 1.10.2
+
+2016-11-29 14:10:26 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/hr.po:
+	* po/ky.po:
+	* po/sv.po:
+	  po: Update translations
+
+2016-11-28 20:05:02 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/mpegts/gstmpegtssection.c:
+	  mpegtssection: Fix off-by-one in PMT parsing
+
+2016-11-28 19:52:24 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/mpegts/gstmpegtssection.c:
+	  mpegtssection: Don't assert if the given section length is longer than the PMT actually is
+	  Instead error out cleanly and just assert that we didn't read more than
+	  the available data.
+
+2016-11-28 17:17:43 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/decklink/gstdecklink.cpp:
+	* sys/decklink/gstdecklink.h:
+	* sys/decklink/gstdecklinkvideosink.cpp:
+	* sys/decklink/gstdecklinkvideosrc.cpp:
+	  decklink: Correctly set top-field-first/bottom-field-first
+	  First of all, all the HD and UHD modes should be top-field-first, as
+	  also returned by the Decklink mode iterator API.
+	  Then we should include the caps field "field-order" in the caps of the
+	  source (not the sink due to negotiation problems with optional fields).
+	  And finally we should set the TFF flag on interlaced buffers that are
+	  top-field-first.
+
+2016-11-28 10:27:56 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: Post an error message on the bus if we activated a program without pads
+	  Otherwise decodebin and applications are going to wait forever for pads
+	  to appear, which is never going to happen.
+	  Happens on this stream, which probably just need support for it added:
+	  https://samples.mplayerhq.hu/3D/AVC_codec_in_m2ts_not_recognized/AVC_codec_not_recognized_right_video_sample.m2ts
+
+2016-11-28 10:49:23 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/hls/m3u8.c:
+	  m3u8: Mark uri_join() function as static
+	  We don't really want to export this, especially not without any
+	  namespacing. This can cause problems for static builds.
+
+2016-11-28 14:22:05 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglwindow.c:
+	  glwindow: move g_main_context_push/pop_thread_default() to run()
+	  Calling g_main_context_push_thread and then g_main_context_invoke()
+	  (used by gst_gl_window_send_message_async()) in the same thread will
+	  cause the invoked function to run immediately instead of being delayed.
+	  This had implications for the creation of the OpenGL context not waiting
+	  until the main loop had completely started up and as a result would
+	  sometimes deadlock in short create/destroy scenarios.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=775171
+
+2016-11-28 14:19:18 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	  glcontext: fix race between creation/shutdown
+	  626bcccff96f624f59c5212b3e21e472240171fd removed some locks that
+	  allowed the main loop quit to occur before the context was fully
+	  created.
+	  2776cef25d2a98668b73272aecfe77e684e6627e attempted to readd them but
+	  missed the scop of the quit() call.
+	  Also remove the use of g_thread_join() as that's not safe to use when
+	  it's possible to lose the last reference from the GL thread.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=775171
+
+2016-11-27 12:40:53 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/rawparse/gstrawbaseparse.c:
+	  rawbaseparse: Fix output buffer size trimming
+	  For frame->buffer, baseparse is doing that automatically for us. For
+	  frame->output_buffer it doesn't and assumes that the subclass is already
+	  doing that. Consistency!
+
+2016-11-27 12:20:11 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/dash/gstmpdparser.c:
+	  dash: Fix stripping of space at the beginning/end of durations
+	  The way how strchr() was called here, it could easily read after the end
+	  of the string. Use g_ascii_isspace() instead.
+	  Detected by asan in the unit test.
+
+2016-11-27 11:44:14 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/rawparse/gstrawaudioparse.c:
+	* gst/rawparse/gstrawbaseparse.c:
+	* gst/rawparse/gstrawbaseparse.h:
+	* gst/rawparse/gstrawvideoparse.c:
+	  rawparse: Properly align raw audio/video output buffers
+	  That is, aligned to the basic type for audio and to 32 bytes for video.
+	  Fixes crashes if the raw buffers are passed to SIMD processing functions.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=774428
+
+2016-11-26 12:28:57 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	  mxfdemux: Post an error message if we got EOS before having any source pads
+	  Otherwise, sending an EOS event has no effect and the application waits
+	  forever for something to happen.
+
+2016-11-26 12:16:39 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videoparsers/gsth264parse.c:
+	  h264parse: Fix indentation
+
+2016-11-26 12:16:18 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videoparsers/gsth265parse.c:
+	  h265parse: Fix assertion when encountering an invalid NALU
+	  Error out properly instead.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=775130
+
+2016-11-26 12:15:50 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videoparsers/gsth264parse.c:
+	  h264parse: Fix assertion when encountering an invalid NALU
+	  Error out properly instead.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=775130
+
+2016-11-26 10:44:43 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst-libs/gst/mpegts/gstmpegtssection.c:
+	  mpegtssection: Add more section size checks
+	  The smallest section ever needs to be at least 3 bytes (i.e. just the short
+	  header).
+	  Non-short headers need to be at least 11 bytes long (3 for the minimum header,
+	  5 for the non-short header, and 4 for the CRC).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=775048
+
+2016-11-26 10:23:01 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst-libs/gst/mpegts/gstmpegtssection.c:
+	  mpegtssection: Fix PAT parsing
+	  Use the estimated number of programs for parsing. Avoids over-reading.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=775120
+
+2016-11-26 09:26:36 +0100  Edward Hervey <edward@centricular.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: Handle GST_SEEK_TYPE_NONE seek
+	  When one is only updating the "stop" position (i.e. non-flushing seek,
+	  with GST_SEEK_TYPE_NONE on the "start" (or stop in reverse) position),
+	  we only need to store those values instead of moving the current position.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=775127
+
+2016-11-25 16:46:45 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	* gst/mxf/mxftypes.c:
+	  mxfdemux: Fix up another size check and prevent allocating too much memory
+
+2016-11-25 15:59:44 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmetadata.c:
+	* gst/mxf/mxftypes.c:
+	* gst/mxf/mxful.c:
+	  mxfdemux: Handle zero-sized KLV items better and don't assert on them
+
+2016-11-25 15:53:50 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	  mxfdemux: Fix various logic errors in error handling of footer partition parsing
+
+2016-11-25 15:53:36 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfdemux.c:
+	  mxfdemux: Don't try parsing empty metadata items
+
+2016-11-25 01:06:45 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfmetadata.c:
+	  mxfmetadata: Add missing NULL check
+
+2016-11-24 19:45:10 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/Makefile.am:
+	* gst/mxf/mxf.c:
+	  mxf: Remove mxfdms1.[ch] from the build for now
+	  It's completely unused currently but might be used in the future.
+
+2016-11-24 23:36:22 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mxf/mxfaes-bwf.c:
+	* gst/mxf/mxfdemux.c:
+	* gst/mxf/mxfdms1.c:
+	* gst/mxf/mxfmetadata.c:
+	* gst/mxf/mxftypes.c:
+	* gst/mxf/mxful.c:
+	  mxfdemux: Add various missing bounds checks, NULL checks and integer overflow protection for error cases
+
+2016-11-24 14:48:35 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/decklink/gstdecklinkvideosrc.cpp:
+	  decklinkvideosrc: Free timecodes when done with a frame
+
+2016-11-24 14:41:59 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/timecode/gsttimecodestamper.c:
+	  timecodestamper: Remove all existing timecode metas if requested to override existing
+
+2016-11-19 16:12:06 +0900  Seungha Yang <sh.yang@lge.com>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: Fix leak in gst_dash_demux_stream_free
+	  Free parsed moof and sync samples with _stream_free().
+	  https://bugzilla.gnome.org/show_bug.cgi?id=774702
+
+2016-11-24 11:12:23 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst-libs/gst/mpegts/gstmpegtssection.c:
+	  mpegtssection: Don't free empty streams
+	  Also avoids a useless assertion
+
+2016-11-24 11:11:35 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst/mpegtsdemux/mpegtspacketizer.c:
+	  mpegtspacketizer: Don't add existing values to group
+	  If the last value is already identical, there is no need in adding it
+	  yet-another-time
+
+2016-11-17 15:41:00 +0000  David Evans <bbcrddave@gmail.com>
+
+	* gst-libs/gst/gl/Makefile.am:
+	  gl: add gstreamer-video to pkg-config path
+	  https://bugzilla.gnome.org/show_bug.cgi?id=774624
+
+2016-11-23 10:51:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videoparsers/gsth264parse.c:
+	  h264parse: Ensure codec_data has the required size when reading number of SPS
+	  https://bugzilla.gnome.org/show_bug.cgi?id=774896
+
+2016-11-23 10:52:05 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videoparsers/gsth265parse.c:
+	  h265parse: Ensure codec_data has the required size when reading number of NAL arrays
+	  https://bugzilla.gnome.org/show_bug.cgi?id=774896
+
+2016-11-22 12:58:44 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mpegtsdemux/mpegtspacketizer.c:
+	  mpegtspacketizer: Reset values before parsing each section
+
+2016-11-22 12:42:45 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/mpegtsdemux/mpegtspacketizer.c:
+	  mpegtspacketizer: Make sure in all cases that we have enough data left for reading a section start
+	  In some cases we ended up parsing sections without.
+
+2016-11-23 17:04:34 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/x11/gstglcontext_glx.c:
+	  gl/contextglx: error out on more invalid display/window combinations
+	  https://bugzilla.gnome.org/show_bug.cgi?id=774851
+
+2016-11-20 12:40:07 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/Makefile.am:
+	  tests: fix lib and cflags order in Makefile.am
+	  pnm: add misssing continuation slash at end of line
+	  vp8parser: no need to link codecparsers twice
+	  dash_demux, mssdemux, hlsdemux: fix lib/flags ordering - local
+	  libs and flags must come first, then base before core before rest
+
+2016-11-20 14:53:52 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* meson.build:
+	  meson: update version
+
+=== release 1.10.1 ===
+
+2016-11-17 15:53:46 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* 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-webrtcdsp.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.10.1
+
+2016-11-17 15:05:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/eo.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/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-11-17 14:46:17 +0200  Sebastian Dröge <sebastian@centricular.com>
 
diff --git a/Makefile.in b/Makefile.in
index d5f9bb8..ed26e37 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -207,7 +207,7 @@
 	$(top_srcdir)/common/release.mak \
 	$(top_srcdir)/common/win32.mak ABOUT-NLS AUTHORS COPYING \
 	COPYING.LIB ChangeLog INSTALL NEWS README compile config.guess \
-	config.rpath config.sub install-sh ltmain.sh missing
+	config.rpath config.sub depcomp install-sh ltmain.sh missing
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
diff --git a/NEWS b/NEWS
index 23b5ab7..815dee3 100644
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,8 @@
 # GStreamer 1.10 Release Notes
 
 GStreamer 1.10.0 was originally released on 1st November 2016.
-The latest bug-fix release in the 1.10 series is [1.10.1](#1.10.1) and was
-released on 17 November 2016.
+The latest bug-fix release in the 1.10 series is [1.10.2](#1.10.2) and was
+released on 29 November 2016.
 
 The GStreamer team is proud to announce a new major feature release in the
 stable 1.x API series of your favourite cross-platform multimedia framework!
@@ -13,7 +13,7 @@
 See [https://gstreamer.freedesktop.org/releases/1.10/][latest] for the latest
 version of this document.
 
-*Last updated: Tuesday 17 Nov 2016, 15:00 UTC [(log)][gitlog]*
+*Last updated: Tuesday 29 Nov 2016, 12:30 UTC [(log)][gitlog]*
 
 [latest]: https://gstreamer.freedesktop.org/releases/1.10/
 [gitlog]: https://cgit.freedesktop.org/gstreamer/www/log/src/htdocs/releases/1.10/release-notes-1.10.md
@@ -1084,7 +1084,7 @@
 
 #### Major bugfixes in 1.10.1
 
- - Security-relevant bugfix in the vmnc decoder (no CVE)
+ - Security-relevant bugfix in the vmnc decoder (CVE-2016-9445, CVE-2016-9446)
  - Various bugfixes to playbin3/decodebin3
  - Fix error at the end of playing any WAV file
  - Fix usability of androidmedia plugin if the camera or sensor API is not
@@ -1099,6 +1099,31 @@
 
 [buglist-1.10.1]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=168172&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.10.1
 
+<a name="1.10.2"></a>
+
+### 1.10.2
+
+The first 1.10 bug-fix release (1.10.2) was released on 29 November 2016.
+This release only contains bugfixes and it should be safe to update from 1.10.x.
+
+#### Major bugfixes in 1.10.2
+
+ - Security-relevant bugfix in the FLI/FLX/FLC decoder (CVE-2016-9634,
+   CVE-2016-9635, CVE-2016-9636)
+ - Various fixes for crashes, assertions and other failures on fuzzed input
+   files (among others, thanks to Hanno Böck for testing and reporting)
+ - SAVP/SAVPF profile in gst-rtsp-server works for live streams again, and the
+   correct MIKEY policy message is generated
+ - Further OpenGL related bugfixes
+ - gst-libav was updated to ffmpeg 3.2.1
+ - ... and many, many more!
+
+For a full list of bugfixes see [Bugzilla][buglist-1.10.2]. Note that this is
+not the full list of changes. For the full list of changes please refer to the
+GIT logs or ChangeLogs of the particular modules.
+
+[buglist-1.10.2]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&classification=Platform&limit=0&list_id=168172&order=bug_id&product=GStreamer&query_format=advanced&resolution=FIXED&target_milestone=1.10.2
+
 ## Known Issues
 
 - iOS builds with iOS 6 SDK and old C++ STL. You need to select iOS 6 instead
diff --git a/RELEASE b/RELEASE
index 6317e5f..e2b60d1 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,11 +1,11 @@
 
-Release notes for GStreamer Bad Plugins 1.10.1
+Release notes for GStreamer Bad Plugins 1.10.2
 
-The GStreamer team is proud to announce the first bugfix release in the stable
+The GStreamer team is proud to announce the second bugfix release in the stable
 1.10 release series of your favourite cross-platform multimedia framework!
 
 
-This release only contains bugfixes and it is safe to update from 1.10.0. For a
+This release only contains bugfixes and it is safe to update from 1.10.x. For a
 full list of bugfixes see Bugzilla.
 
 
@@ -60,11 +60,14 @@
 
 Bugs fixed in this release
      
-      * 773681 : directsoundsink: High cpu usage on windows x86
-      * 773313 : decklinkaudiosrc: Ignore channel-mask when checking set_caps compatibility
-      * 774287 : hls: gst_m3u8_has_next_fragment crash
-      * 774328 : dtlssrtpenc: criticals with gst-inspect-1.0 and state change unit test
-      * 774462 : glwindow: found memory leak of navigation_thread
+      * 774624 : GstGL build error due to not finding GstVideo-1.0.gir
+      * 774702 : dashdemux: Fix leak in gst_dash_demux_stream_free
+      * 774851 : glimagesink segfault when specifying GST_GL_WINDOW to something else than x11
+      * 774896 : h264 parser: Off by one read in gst_h264_parse_set_caps()
+      * 775048 : mpegts decoder: Out of bounds read in gst_mpegts_section_new
+      * 775120 : mpegts parser: null pointer deref in _parse_pat
+      * 775127 : hls_demux.testSeekUpdateStopPosition : The unit test that was always wrong
+      * 775130 : h264 parser: invalid input causes assert
 
 ==== Download ====
 
@@ -101,9 +104,10 @@
         
 Contributors to this release
     
-      * Haihua Hu
+      * David Evans
+      * Edward Hervey
       * Matthew Waters
       * Sebastian Dröge
+      * Seungha Yang
       * Tim-Philipp Müller
-      * Vivia Nikolaidou
  
\ No newline at end of file
diff --git a/config.guess b/config.guess
index 0967f2a..2e9ad7f 100755
--- a/config.guess
+++ b/config.guess
@@ -2,7 +2,7 @@
 # Attempt to guess a canonical system name.
 #   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2016-04-02'
+timestamp='2016-10-02'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -186,9 +186,12 @@
 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
+	# to ELF recently (or will in the future) and ABI.
 	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
+	    earm*)
+		os=netbsdelf
+		;;
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
 			| grep -q __ELF__
@@ -997,6 +1000,9 @@
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
 	;;
+    mips64el:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     openrisc*:Linux:*:*)
 	echo or1k-unknown-linux-${LIBC}
 	exit ;;
@@ -1029,6 +1035,9 @@
     ppcle:Linux:*:*)
 	echo powerpcle-unknown-linux-${LIBC}
 	exit ;;
+    riscv32:Linux:*:* | riscv64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
 	exit ;;
@@ -1408,18 +1417,17 @@
 cat >&2 <<EOF
 $0: unable to guess system type
 
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite
+config.guess and config.sub with the latest versions from:
 
   http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
   http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
 
 config.guess timestamp = $timestamp
 
diff --git a/config.sub b/config.sub
index 8d39c4b..dd2ca93 100755
--- a/config.sub
+++ b/config.sub
@@ -2,7 +2,7 @@
 # Configuration validation subroutine script.
 #   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2016-03-30'
+timestamp='2016-11-04'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -117,7 +117,7 @@
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
   linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
   knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
-  kopensolaris*-gnu* | \
+  kopensolaris*-gnu* | cloudabi*-eabi* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
@@ -301,6 +301,7 @@
 	| open8 | or1k | or1knd | or32 \
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
+	| pru \
 	| pyramid \
 	| riscv32 | riscv64 \
 	| rl78 | rx \
@@ -428,6 +429,7 @@
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+	| pru-* \
 	| pyramid-* \
 	| riscv32-* | riscv64-* \
 	| rl78-* | romp-* | rs6000-* | rx-* \
@@ -643,6 +645,14 @@
 		basic_machine=m68k-bull
 		os=-sysv3
 		;;
+	e500v[12])
+		basic_machine=powerpc-unknown
+		os=$os"spe"
+		;;
+	e500v[12]-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=$os"spe"
+		;;
 	ebmon29k)
 		basic_machine=a29k-amd
 		os=-ebmon
@@ -1022,7 +1032,7 @@
 	ppc-* | ppcbe-*)
 		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
+	ppcle | powerpclittle)
 		basic_machine=powerpcle-unknown
 		;;
 	ppcle-* | powerpclittle-*)
@@ -1032,7 +1042,7 @@
 		;;
 	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+	ppc64le | powerpc64little)
 		basic_machine=powerpc64le-unknown
 		;;
 	ppc64le-* | powerpc64little-*)
@@ -1389,7 +1399,7 @@
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* | -cegcc* \
 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
 	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
@@ -1399,7 +1409,7 @@
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
 	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-	      | -onefs* | -tirtos*)
+	      | -onefs* | -tirtos* | -phoenix* | -fuchsia*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
diff --git a/configure b/configure
index 7983b05..b5a3f41 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.10.1.
+# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 1.10.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.10.1'
-PACKAGE_STRING='GStreamer Bad Plug-ins 1.10.1'
+PACKAGE_VERSION='1.10.2'
+PACKAGE_STRING='GStreamer Bad Plug-ins 1.10.2'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -2689,7 +2689,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.10.1 to adapt to many kinds of systems.
+\`configure' configures GStreamer Bad Plug-ins 1.10.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -2761,7 +2761,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.10.1:";;
+     short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.10.2:";;
    esac
   cat <<\_ACEOF
 
@@ -3485,7 +3485,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer Bad Plug-ins configure 1.10.1
+GStreamer Bad Plug-ins configure 1.10.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -4458,7 +4458,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.10.1, which was
+It was created by GStreamer Bad Plug-ins $as_me 1.10.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -5440,7 +5440,7 @@
 
 # Define the identity of the package.
  PACKAGE='gst-plugins-bad'
- VERSION='1.10.1'
+ VERSION='1.10.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -5651,9 +5651,9 @@
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 1.10.1 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 1.10.1 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 1.10.1 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 1.10.2 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.10.2 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.10.2 | cut -d'.' -f3)
 
 
 
@@ -5664,7 +5664,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.10.1 | cut -d'.' -f4)
+  NANO=$(echo 1.10.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
@@ -10508,10 +10508,10 @@
 done
 
 
-  GST_CURRENT=1001
+  GST_CURRENT=1002
   GST_REVISION=0
-  GST_AGE=1001
-  GST_LIBVERSION=1001:0:1001
+  GST_AGE=1002
+  GST_LIBVERSION=1002:0:1002
 
 
 
@@ -61312,7 +61312,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.10.1, which was
+This file was extended by GStreamer Bad Plug-ins $as_me 1.10.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -61378,7 +61378,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.10.1
+GStreamer Bad Plug-ins config.status 1.10.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 35986ec..f9a3051 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.10.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
+AC_INIT([GStreamer Bad Plug-ins],[1.10.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
 
 AG_GST_INIT
 
@@ -51,7 +51,7 @@
 dnl - interfaces added -> increment AGE
 dnl - interfaces removed -> AGE = 0
 dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 1001, 0, 1001)
+AS_LIBTOOL(GST, 1002, 0, 1002)
 
 dnl *** required versions of GStreamer stuff ***
 GST_REQ=1.10.0
diff --git a/docs/libs/html/api-index-full.html b/docs/libs/html/api-index-full.html
index efd6412..cf24f01 100644
--- a/docs/libs/html/api-index-full.html
+++ b/docs/libs/html/api-index-full.html
@@ -403,15 +403,15 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextCocoa.html#GstGLContextCocoa">GstGLContextCocoa</a>, struct in GstGLContextCocoa
+GstGLContextCocoa, struct in GstGLContextCocoa
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextEagl.html#GstGLContextEagl">GstGLContextEagl</a>, struct in GstGLContextEagl
+GstGLContextEagl, struct in GstGLContextEagl
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextEGL.html#GstGLContextEGL">GstGLContextEGL</a>, struct in GstGLContextEGL
+GstGLContextEGL, struct in GstGLContextEGL
 </dt>
 <dd></dd>
 <dt>
@@ -419,7 +419,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextGLX.html#GstGLContextGLX">GstGLContextGLX</a>, struct in GstGLContextGLX
+GstGLContextGLX, struct in GstGLContextGLX
 </dt>
 <dd></dd>
 <dt>
@@ -427,7 +427,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextWGL.html#GstGLContextWGL">GstGLContextWGL</a>, struct in GstGLContextWGL
+GstGLContextWGL, struct in GstGLContextWGL
 </dt>
 <dd></dd>
 <dt>
@@ -667,11 +667,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowAndroid.html#GstGLWindowAndroidEGL">GstGLWindowAndroidEGL</a>, struct in GstGLWindowAndroid
+GstGLWindowAndroidEGL, struct in GstGLWindowAndroid
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowAndroid.html#GstGLWindowAndroidEGLClass">GstGLWindowAndroidEGLClass</a>, struct in GstGLWindowAndroid
+GstGLWindowAndroidEGLClass, struct in GstGLWindowAndroid
 </dt>
 <dd></dd>
 <dt>
@@ -683,19 +683,19 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowCocoa.html#GstGLWindowCocoa">GstGLWindowCocoa</a>, struct in GstGLWindowCocoa
+GstGLWindowCocoa, struct in GstGLWindowCocoa
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowCocoa.html#GstGLWindowCocoaClass">GstGLWindowCocoaClass</a>, struct in GstGLWindowCocoa
+GstGLWindowCocoaClass, struct in GstGLWindowCocoa
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowDispmanx.html#GstGLWindowDispmanxEGL">GstGLWindowDispmanxEGL</a>, struct in GstGLWindowDispmanx
+GstGLWindowDispmanxEGL, struct in GstGLWindowDispmanx
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowDispmanx.html#GstGLWindowDispmanxEGLClass">GstGLWindowDispmanxEGLClass</a>, struct in GstGLWindowDispmanx
+GstGLWindowDispmanxEGLClass, struct in GstGLWindowDispmanx
 </dt>
 <dd></dd>
 <dt>
@@ -707,27 +707,27 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowWayland.html#GstGLWindowWaylandEGL">GstGLWindowWaylandEGL</a>, struct in GstGLWindowWayland
+GstGLWindowWaylandEGL, struct in GstGLWindowWayland
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowWayland.html#GstGLWindowWaylandEGLClass">GstGLWindowWaylandEGLClass</a>, struct in GstGLWindowWayland
+GstGLWindowWaylandEGLClass, struct in GstGLWindowWayland
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowWin32.html#GstGLWindowWin32">GstGLWindowWin32</a>, struct in GstGLWindowWin32
+GstGLWindowWin32, struct in GstGLWindowWin32
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowWin32.html#GstGLWindowWin32Class">GstGLWindowWin32Class</a>, struct in GstGLWindowWin32
+GstGLWindowWin32Class, struct in GstGLWindowWin32
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowX11.html#GstGLWindowX11">GstGLWindowX11</a>, struct in GstGLWindowX11
+GstGLWindowX11, struct in GstGLWindowX11
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowX11.html#GstGLWindowX11Class">GstGLWindowX11Class</a>, struct in GstGLWindowX11
+GstGLWindowX11Class, struct in GstGLWindowX11
 </dt>
 <dd></dd>
 <dt>
@@ -955,15 +955,15 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextCocoa.html#gst-gl-context-cocoa-get-current-context">gst_gl_context_cocoa_get_current_context</a>, function in GstGLContextCocoa
+gst_gl_context_cocoa_get_current_context, function in GstGLContextCocoa
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextCocoa.html#gst-gl-context-cocoa-get-pixel-format">gst_gl_context_cocoa_get_pixel_format</a>, function in GstGLContextCocoa
+gst_gl_context_cocoa_get_pixel_format, function in GstGLContextCocoa
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextCocoa.html#gst-gl-context-cocoa-new">gst_gl_context_cocoa_new</a>, function in GstGLContextCocoa
+gst_gl_context_cocoa_new, function in GstGLContextCocoa
 </dt>
 <dd></dd>
 <dt>
@@ -983,15 +983,15 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextEagl.html#gst-gl-context-eagl-get-current-context">gst_gl_context_eagl_get_current_context</a>, function in GstGLContextEagl
+gst_gl_context_eagl_get_current_context, function in GstGLContextEagl
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextEagl.html#gst-gl-context-eagl-new">gst_gl_context_eagl_new</a>, function in GstGLContextEagl
+gst_gl_context_eagl_new, function in GstGLContextEagl
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextEGL.html#gst-gl-context-egl-get-current-context">gst_gl_context_egl_get_current_context</a>, function in GstGLContextEGL
+gst_gl_context_egl_get_current_context, function in GstGLContextEGL
 </dt>
 <dd></dd>
 <dt>
@@ -999,11 +999,11 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextEGL.html#gst-gl-context-egl-get-proc-address">gst_gl_context_egl_get_proc_address</a>, function in GstGLContextEGL
+gst_gl_context_egl_get_proc_address, function in GstGLContextEGL
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextEGL.html#gst-gl-context-egl-new">gst_gl_context_egl_new</a>, function in GstGLContextEGL
+gst_gl_context_egl_new, function in GstGLContextEGL
 </dt>
 <dd></dd>
 <dt>
@@ -1071,15 +1071,15 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextGLX.html#gst-gl-context-glx-get-current-context">gst_gl_context_glx_get_current_context</a>, function in GstGLContextGLX
+gst_gl_context_glx_get_current_context, function in GstGLContextGLX
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextGLX.html#gst-gl-context-glx-get-proc-address">gst_gl_context_glx_get_proc_address</a>, function in GstGLContextGLX
+gst_gl_context_glx_get_proc_address, function in GstGLContextGLX
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextGLX.html#gst-gl-context-glx-new">gst_gl_context_glx_new</a>, function in GstGLContextGLX
+gst_gl_context_glx_new, function in GstGLContextGLX
 </dt>
 <dd></dd>
 <dt>
@@ -1111,15 +1111,15 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextWGL.html#gst-gl-context-wgl-get-current-context">gst_gl_context_wgl_get_current_context</a>, function in GstGLContextWGL
+gst_gl_context_wgl_get_current_context, function in GstGLContextWGL
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextWGL.html#gst-gl-context-wgl-get-proc-address">gst_gl_context_wgl_get_proc_address</a>, function in GstGLContextWGL
+gst_gl_context_wgl_get_proc_address, function in GstGLContextWGL
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLContextWGL.html#gst-gl-context-wgl-new">gst_gl_context_wgl_new</a>, function in GstGLContextWGL
+gst_gl_context_wgl_new, function in GstGLContextWGL
 </dt>
 <dd></dd>
 <dt>
@@ -1823,7 +1823,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowAndroid.html#gst-gl-window-android-egl-new">gst_gl_window_android_egl_new</a>, function in GstGLWindowAndroid
+gst_gl_window_android_egl_new, function in GstGLWindowAndroid
 </dt>
 <dd></dd>
 <dt>
@@ -1831,15 +1831,15 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowCocoa.html#gst-gl-window-cocoa-create-window">gst_gl_window_cocoa_create_window</a>, function in GstGLWindowCocoa
+gst_gl_window_cocoa_create_window, function in GstGLWindowCocoa
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowCocoa.html#gst-gl-window-cocoa-new">gst_gl_window_cocoa_new</a>, function in GstGLWindowCocoa
+gst_gl_window_cocoa_new, function in GstGLWindowCocoa
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowDispmanx.html#gst-gl-window-dispmanx-egl-new">gst_gl_window_dispmanx_egl_new</a>, function in GstGLWindowDispmanx
+gst_gl_window_dispmanx_egl_new, function in GstGLWindowDispmanx
 </dt>
 <dd></dd>
 <dt>
@@ -1939,31 +1939,31 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowWayland.html#gst-gl-window-wayland-egl-new">gst_gl_window_wayland_egl_new</a>, function in GstGLWindowWayland
+gst_gl_window_wayland_egl_new, function in GstGLWindowWayland
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowWin32.html#gst-gl-window-win32-create-window">gst_gl_window_win32_create_window</a>, function in GstGLWindowWin32
+gst_gl_window_win32_create_window, function in GstGLWindowWin32
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowWin32.html#gst-gl-window-win32-new">gst_gl_window_win32_new</a>, function in GstGLWindowWin32
+gst_gl_window_win32_new, function in GstGLWindowWin32
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowX11.html#gst-gl-window-x11-create-window">gst_gl_window_x11_create_window</a>, function in GstGLWindowX11
+gst_gl_window_x11_create_window, function in GstGLWindowX11
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowX11.html#gst-gl-window-x11-new">gst_gl_window_x11_new</a>, function in GstGLWindowX11
+gst_gl_window_x11_new, function in GstGLWindowX11
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowX11.html#gst-gl-window-x11-trap-x-errors">gst_gl_window_x11_trap_x_errors</a>, function in GstGLWindowX11
+gst_gl_window_x11_trap_x_errors, function in GstGLWindowX11
 </dt>
 <dd></dd>
 <dt>
-<a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0gst-plugins-bad-libs-GstGLWindowX11.html#gst-gl-window-x11-untrap-x-errors">gst_gl_window_x11_untrap_x_errors</a>, function in GstGLWindowX11
+gst_gl_window_x11_untrap_x_errors, function in GstGLWindowX11
 </dt>
 <dd></dd>
 <a name="idxH"></a><h3 class="title">H</h3>
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index 6320114..041bcc7 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.10.1)
+      for GStreamer Bad Library 1.0 (1.10.2)
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/</a>.
     </p></div>
 </div>
diff --git a/docs/plugins/gst-plugins-bad-plugins.hierarchy b/docs/plugins/gst-plugins-bad-plugins.hierarchy
index 2a879f1..913cd8e 100644
--- a/docs/plugins/gst-plugins-bad-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-bad-plugins.hierarchy
@@ -391,45 +391,6 @@
   GstColorBalanceChannel
   GstEncodingProfile
   MXFMetadataBase
-    MXFDescriptiveMetadata
-      MXFDMS1
-        MXFDMS1Address
-        MXFDMS1Communications
-        MXFDMS1ContactsList
-        MXFDMS1Framework
-          MXFDMS1ProductionClipFramework
-            MXFDMS1ClipFramework
-            MXFDMS1ProductionFramework
-          MXFDMS1SceneFramework
-        MXFDMS1NameValue
-        MXFDMS1PictureFormat
-        MXFDMS1Processing
-        MXFDMS1Project
-        MXFDMS1Publication
-        MXFDMS1TextLanguage
-          MXFDMS1Branding
-          MXFDMS1CueWords
-          MXFDMS1Shot
-          MXFDMS1Thesaurus
-            MXFDMS1Annotation
-            MXFDMS1Award
-            MXFDMS1CaptionsDescription
-            MXFDMS1Classification
-            MXFDMS1Contact
-              MXFDMS1Location
-              MXFDMS1Organisation
-              MXFDMS1Person
-            MXFDMS1Contract
-            MXFDMS1DeviceParameters
-            MXFDMS1Event
-            MXFDMS1GroupRelationship
-            MXFDMS1Identification
-            MXFDMS1KeyPoint
-            MXFDMS1Participant
-            MXFDMS1Rights
-            MXFDMS1Scripting
-            MXFDMS1SettingPeriod
-          MXFDMS1Titles
     MXFMetadata
       MXFMetadataContentStorage
       MXFMetadataEssenceContainerData
@@ -476,4 +437,3 @@
   GstVideoOverlay
   GstWaylandVideo
   GtkBuildable
-  MXFDescriptiveMetadataFrameworkInterface
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glimagesinkelement.html b/docs/plugins/html/gst-plugins-bad-plugins-glimagesinkelement.html
index a735f9e..adb8500 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-glimagesinkelement.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glimagesinkelement.html
@@ -98,7 +98,7 @@
 <td class="property_flags">Read / Write</td>
 </tr>
 <tr>
-<td class="property_type"><span class="type">GstGLStereoDownmix</span></td>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLViewConvert.html#GstGLStereoDownmix"><span class="type">GstGLStereoDownmix</span></a></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>
@@ -324,7 +324,7 @@
 <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>
+<pre class="programlisting">  “output-multiview-downmix-mode” <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLViewConvert.html#GstGLStereoDownmix"><span class="type">GstGLStereoDownmix</span></a></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>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glstereomix.html b/docs/plugins/html/gst-plugins-bad-plugins-glstereomix.html
index f6e4334..e95aa30 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-glstereomix.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glstereomix.html
@@ -43,7 +43,7 @@
 <col width="200px" class="properties_flags">
 </colgroup>
 <tbody><tr>
-<td class="property_type"><span class="type">GstGLStereoDownmix</span></td>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLViewConvert.html#GstGLStereoDownmix"><span class="type">GstGLStereoDownmix</span></a></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>
@@ -252,7 +252,7 @@
 <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>
+<pre class="programlisting">  “downmix-mode”             <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLViewConvert.html#GstGLStereoDownmix"><span class="type">GstGLStereoDownmix</span></a></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>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-glviewconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-glviewconvert.html
index abb8b4a..bc43e0b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-glviewconvert.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-glviewconvert.html
@@ -43,7 +43,7 @@
 </colgroup>
 <tbody>
 <tr>
-<td class="property_type"><span class="type">GstGLStereoDownmix</span></td>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLViewConvert.html#GstGLStereoDownmix"><span class="type">GstGLStereoDownmix</span></a></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>
@@ -234,7 +234,7 @@
 <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>
+<pre class="programlisting">  “downmix-mode”             <a href="/usr/share/gtk-doc/html/gst-plugins-bad-libs-1.0GstGLViewConvert.html#GstGLStereoDownmix"><span class="type">GstGLStereoDownmix</span></a></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>
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 fba6224..40f293f 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.10.1</td>
+<td>1.10.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 337bbff..a6f05d1 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.10.1</td>
+<td>1.10.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 ab534fc..1379d2b 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.10.1</td>
+<td>1.10.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 ea14780..ca95a27 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.10.1</td>
+<td>1.10.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 051ed64..c72c95f 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.10.1</td>
+<td>1.10.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 dc3804c..0e83165 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.10.1</td>
+<td>1.10.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 2d349cb..fe7e312 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.10.1</td>
+<td>1.10.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 a136231..df2fbe0 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.10.1</td>
+<td>1.10.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 319d0b7..294b471 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.10.1</td>
+<td>1.10.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 418b7aa..ae40196 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.10.1</td>
+<td>1.10.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 0fee052..a4821ac 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.10.1</td>
+<td>1.10.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 8188adf..e4c8b88 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.10.1</td>
+<td>1.10.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 e9113d3..dc2416f 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.10.1</td>
+<td>1.10.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 2a9ac93..6ec3488 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.10.1</td>
+<td>1.10.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 45116fa..466d2ed 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.10.1</td>
+<td>1.10.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 ccb54cf..3da2ad0 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.10.1</td>
+<td>1.10.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 7760412..402ba12 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.10.1</td>
+<td>1.10.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 fa8de8b..f721e21 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.10.1</td>
+<td>1.10.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 d85d265..a4f270c 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.10.1</td>
+<td>1.10.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 f6d83d7..433658a 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.10.1</td>
+<td>1.10.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 70a7d2a..29492c5 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.10.1</td>
+<td>1.10.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 28cf31b..abac403 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.10.1</td>
+<td>1.10.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 3fc8551..35298ce 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.10.1</td>
+<td>1.10.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 05e518f..f0ee560 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.10.1</td>
+<td>1.10.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 59e64fd..7a3d23a 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.10.1</td>
+<td>1.10.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 433e1bd..d6f9439 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.10.1</td>
+<td>1.10.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 0056ffc..3e5d15e 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.10.1</td>
+<td>1.10.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 5c5228a..be084b3 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.10.1</td>
+<td>1.10.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 3af6e03..6e171cd 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.10.1</td>
+<td>1.10.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 2360624..85755a3 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.10.1</td>
+<td>1.10.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 7623de3..902b5c0 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.10.1</td>
+<td>1.10.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 076ebd7..f2a0486 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.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 aabf2cd..4cbf28d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.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-opengl.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opengl.html
index a5ce1a5..f9628ef 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opengl.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opengl.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
index c1c893d..53ac02d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
index 54f9961..c72d99a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
index 99ddc2c..f757f71 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.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-rtmp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
index 4e42666..13c3c47 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
index aa45a35..e2f5228 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
index 19d6042..bebac8f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
index 76bff67..958cd75 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.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-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
index 5174a1d..2aa3d39 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
index 202d733..ff86a16 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
index 9ded448..dff87f4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.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-webrtcdsp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-webrtcdsp.html
index 243d1be..bfe6b0f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-webrtcdsp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-webrtcdsp.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
index fb73b67..528dd31 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
@@ -41,7 +41,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.10.1</td>
+<td>1.10.2</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index ff6b576..feced84 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.10.1)
+      for GStreamer Bad Plugins 1.0 (1.10.2)
       The latest version of this documentation can be found on-line at
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/</a>.
     </p></div>
diff --git a/docs/plugins/inspect/plugin-accurip.xml b/docs/plugins/inspect/plugin-accurip.xml
index e7fd395..47975cb 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.10.1</version>
+  <version>1.10.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 d553995..300316b 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.10.1</version>
+  <version>1.10.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 5b699bd..66fe0d2 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.10.1</version>
+  <version>1.10.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 e5506e7..c75ecb6 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.10.1</version>
+  <version>1.10.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 cb22a45..71e47f1 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.10.1</version>
+  <version>1.10.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 6bb50dd..e58c79c 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.10.1</version>
+  <version>1.10.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 7f78a60..0b307da 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.10.1</version>
+  <version>1.10.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 2a79212..ac3f2b3 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.10.1</version>
+  <version>1.10.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 292a252..0c10270 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.10.1</version>
+  <version>1.10.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 319e3d5..5153926 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.10.1</version>
+  <version>1.10.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 b71750c..5598043 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.10.1</version>
+  <version>1.10.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 4b3c2b7..4d0e3d1 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.10.1</version>
+  <version>1.10.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 58bb665..dcec29c 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.10.1</version>
+  <version>1.10.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 ff042ef..324813b 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.10.1</version>
+  <version>1.10.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 a6be470..bee563c 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.10.1</version>
+  <version>1.10.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 bc3838a..d6c56bd 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.10.1</version>
+  <version>1.10.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 6dfcd2f..4c911bd 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.10.1</version>
+  <version>1.10.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 9dfdc5e..c276a49 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.10.1</version>
+  <version>1.10.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 38919da..fa994fa 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.10.1</version>
+  <version>1.10.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 fe018dd..d13e227 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.10.1</version>
+  <version>1.10.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 683982b..6a86f44 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.10.1</version>
+  <version>1.10.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 dfc1efd..36c9e11 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.10.1</version>
+  <version>1.10.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 bb682a8..c295123 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.10.1</version>
+  <version>1.10.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 c23060d..7250256 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.10.1</version>
+  <version>1.10.2</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
@@ -65,7 +65,7 @@
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)v210; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)BGRA; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)24000/1001, format=(string)v210; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)24000/1001, format=(string)BGRA; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)v210; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)BGRA; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)v210; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)BGRA; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)v210; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)25/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)BGRA; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)v210; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)BGRA; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)v210; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)BGRA; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)v210; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)BGRA; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)v210; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)BGRA; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)v210; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)BGRA; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)v210; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)BGRA</details>
+          <details>video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, field-order=(string)bottom-field-first, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, field-order=(string)bottom-field-first, format=(string)v210; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, field-order=(string)bottom-field-first, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, field-order=(string)bottom-field-first, format=(string)BGRA; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)24000/1001, field-order=(string)bottom-field-first, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)24000/1001, field-order=(string)bottom-field-first, format=(string)v210; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)24000/1001, field-order=(string)bottom-field-first, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)interleaved, framerate=(fraction)24000/1001, field-order=(string)bottom-field-first, format=(string)BGRA; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)25/1, field-order=(string)top-field-first, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)25/1, field-order=(string)top-field-first, format=(string)v210; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)25/1, field-order=(string)top-field-first, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)interleaved, framerate=(fraction)25/1, field-order=(string)top-field-first, format=(string)BGRA; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)v210; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)486, pixel-aspect-ratio=(fraction)10/11, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)BGRA; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt601, chroma-site=(string)mpeg2; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)v210; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)12/11, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)25/1, field-order=(string)top-field-first, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)25/1, field-order=(string)top-field-first, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)25/1, field-order=(string)top-field-first, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)25/1, field-order=(string)top-field-first, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, field-order=(string)top-field-first, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, field-order=(string)top-field-first, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, field-order=(string)top-field-first, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30000/1001, field-order=(string)top-field-first, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30/1, field-order=(string)top-field-first, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30/1, field-order=(string)top-field-first, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30/1, field-order=(string)top-field-first, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)interleaved, framerate=(fraction)30/1, field-order=(string)top-field-first, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)BGRA; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)v210; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)ARGB; video/x-raw, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)BGRA; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)v210; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)BGRA; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)v210; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)BGRA; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)v210; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)ARGB; video/x-raw, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)BGRA; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)v210; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)BGRA; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)v210; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)BGRA; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt709, chroma-site=(string)mpeg2; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)v210; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)2048, height=(int)1556, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24000/1001, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)24/1, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)25/1, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30000/1001, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)50/1, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60000/1001, format=(string)BGRA; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)UYVY, colorimetry=(string)bt2020, chroma-site=(string)mpeg2; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)v210; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)ARGB; video/x-raw, width=(int)3840, height=(int)2160, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)60/1, format=(string)BGRA</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-dfbvideosink.xml b/docs/plugins/inspect/plugin-dfbvideosink.xml
index 63bf5cd..e7fdfbd 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.10.1</version>
+  <version>1.10.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 ef7f3ab..bb47df5 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.10.1</version>
+  <version>1.10.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 273e428..00ac43a 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.10.1</version>
+  <version>1.10.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 45256bd..596889a 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.10.1</version>
+  <version>1.10.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 173d817..ad48491 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.10.1</version>
+  <version>1.10.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 8c5f28c..5b8c738 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.10.1</version>
+  <version>1.10.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 39a824d..42af9c4 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.10.1</version>
+  <version>1.10.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 58e176d..5e05382 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.10.1</version>
+  <version>1.10.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 d52d9fb..70a3c9e 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.10.1</version>
+  <version>1.10.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
index 663fd16..01c9a0f 100644
--- a/docs/plugins/inspect/plugin-fdkaac.xml
+++ b/docs/plugins/inspect/plugin-fdkaac.xml
@@ -3,7 +3,7 @@
   <description>Fraunhofer FDK AAC Codec plugin</description>
   <filename>../../ext/fdkaac/.libs/libgstfdkaac.so</filename>
   <basename>libgstfdkaac.so</basename>
-  <version>1.10.1</version>
+  <version>1.10.2</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-festival.xml b/docs/plugins/inspect/plugin-festival.xml
index 6f4ecfd..c0d83fd 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.10.1</version>
+  <version>1.10.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 4be5dc1..7cf21a8 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.10.1</version>
+  <version>1.10.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 303936e..304fc7c 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.10.1</version>
+  <version>1.10.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 12ba166..31d1920 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.10.1</version>
+  <version>1.10.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 79b009a..2b84485 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.10.1</version>
+  <version>1.10.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 cfc641c..7ccd063 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.10.1</version>
+  <version>1.10.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 809d3a7..0e4e82c 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.10.1</version>
+  <version>1.10.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 18e989d..e812127 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.10.1</version>
+  <version>1.10.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 679ad20..ff76c58 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.10.1</version>
+  <version>1.10.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 c7fbece..7d97f0e 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.10.1</version>
+  <version>1.10.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 12988ce..525b29b 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.10.1</version>
+  <version>1.10.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 0f67f8f..976b53a 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.10.1</version>
+  <version>1.10.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 1e60f3a..cf17d44 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.10.1</version>
+  <version>1.10.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 b662af5..a5ee208 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.10.1</version>
+  <version>1.10.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 d753357..cd0582a 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.10.1</version>
+  <version>1.10.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 f0241b4..0607c8a 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.10.1</version>
+  <version>1.10.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 7608c4b..d63126c 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.10.1</version>
+  <version>1.10.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 f3c2f54..04a7ed7 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.10.1</version>
+  <version>1.10.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 37360f4..9e2eeac 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.10.1</version>
+  <version>1.10.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 edb7eb9..c4a04f2 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.10.1</version>
+  <version>1.10.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 613ee35..07484d7 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.10.1</version>
+  <version>1.10.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 859f2bf..201be6d 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.10.1</version>
+  <version>1.10.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 ac58f8e..54bdea7 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.10.1</version>
+  <version>1.10.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 abbb845..6a96df2 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.10.1</version>
+  <version>1.10.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 a877718..616dfaa 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.10.1</version>
+  <version>1.10.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 c9c5545..5a7bb65 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.10.1</version>
+  <version>1.10.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 21796e4..e169b25 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.10.1</version>
+  <version>1.10.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 d5433d7..0306af5 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.10.1</version>
+  <version>1.10.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 7f53bb8..9090713 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.10.1</version>
+  <version>1.10.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 3476983..46e024a 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.10.1</version>
+  <version>1.10.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 2c6beb2..9b21328 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.10.1</version>
+  <version>1.10.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 36a001e..9727804 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.10.1</version>
+  <version>1.10.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 2e22776..175e407 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.10.1</version>
+  <version>1.10.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 15cdaab..54f6abd 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.10.1</version>
+  <version>1.10.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 199b2fe..68bf9b2 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.10.1</version>
+  <version>1.10.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 c38703c..afd22cd 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.10.1</version>
+  <version>1.10.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 2817b0b..4657118 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.10.1</version>
+  <version>1.10.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 7a31c0e..1122560 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.10.1</version>
+  <version>1.10.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 cecc670..6303120 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.10.1</version>
+  <version>1.10.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 2034de8..7044368 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.10.1</version>
+  <version>1.10.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 29cc0e8..ac58fe0 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.10.1</version>
+  <version>1.10.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 219894a..66a8ce5 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.10.1</version>
+  <version>1.10.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 bb0235c..0f5a2cb 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.10.1</version>
+  <version>1.10.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 a5005ae..8a517b1 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.10.1</version>
+  <version>1.10.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 ecd5317..117c71f 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.10.1</version>
+  <version>1.10.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 e77210d..d655a44 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.10.1</version>
+  <version>1.10.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 381acaa..5ff5c56 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.10.1</version>
+  <version>1.10.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 f256f50..26265a9 100644
--- a/docs/plugins/inspect/plugin-qt.xml
+++ b/docs/plugins/inspect/plugin-qt.xml
@@ -3,7 +3,7 @@
   <description>Qt gl plugin</description>
   <filename>../../ext/qt/.libs/libgstqmlgl.so</filename>
   <basename>libgstqmlgl.so</basename>
-  <version>1.10.1</version>
+  <version>1.10.2</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rawparse.xml b/docs/plugins/inspect/plugin-rawparse.xml
index 0ca7cba..974654f 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.10.1</version>
+  <version>1.10.2</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-removesilence.xml b/docs/plugins/inspect/plugin-removesilence.xml
index 07f5645..79eafd6 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.10.1</version>
+  <version>1.10.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 61a49c3..95d3aa7 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.10.1</version>
+  <version>1.10.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 5ca2abd..43cad1d 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.10.1</version>
+  <version>1.10.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 d65683f..0eeb12a 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.10.1</version>
+  <version>1.10.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 49b1c18..93fa58f 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.10.1</version>
+  <version>1.10.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 89b0200..fd4223e 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.10.1</version>
+  <version>1.10.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 1fde6f7..4c28baa 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.10.1</version>
+  <version>1.10.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 d1f044e..e49a565 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.10.1</version>
+  <version>1.10.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 1d9280d..3f602aa 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.10.1</version>
+  <version>1.10.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 eb6fea5..2448e9f 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.10.1</version>
+  <version>1.10.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 21c1021..24b640d 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.10.1</version>
+  <version>1.10.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 dab54ca..df344d9 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.10.1</version>
+  <version>1.10.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 9beea49..a3fe17f 100644
--- a/docs/plugins/inspect/plugin-smoothstreaming.xml
+++ b/docs/plugins/inspect/plugin-smoothstreaming.xml
@@ -3,7 +3,7 @@
   <description>Microsoft&apos;s Smooth Streaming format support </description>
   <filename>../../ext/smoothstreaming/.libs/libgstsmoothstreaming.so</filename>
   <basename>libgstsmoothstreaming.so</basename>
-  <version>1.10.1</version>
+  <version>1.10.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 c0e65fa..72c0131 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.10.1</version>
+  <version>1.10.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 d1a5a87..c4c33dc 100644
--- a/docs/plugins/inspect/plugin-soundtouch.xml
+++ b/docs/plugins/inspect/plugin-soundtouch.xml
@@ -3,7 +3,7 @@
   <description>Audio Pitch Controller &amp; BPM Detection</description>
   <filename>../../ext/soundtouch/.libs/libgstsoundtouch.so</filename>
   <basename>libgstsoundtouch.so</basename>
-  <version>1.10.1</version>
+  <version>1.10.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 b473ded..e347d0c 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.10.1</version>
+  <version>1.10.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 031d69c..d543444 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.10.1</version>
+  <version>1.10.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 5344991..424e3af 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.10.1</version>
+  <version>1.10.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 b85890d..b88229b 100644
--- a/docs/plugins/inspect/plugin-stereo.xml
+++ b/docs/plugins/inspect/plugin-stereo.xml
@@ -3,7 +3,7 @@
   <description>Muck with the stereo signal, enhance it&apos;s &apos;stereo-ness&apos;</description>
   <filename>../../gst/stereo/.libs/libgststereo.so</filename>
   <basename>libgststereo.so</basename>
-  <version>1.10.1</version>
+  <version>1.10.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 5de1050..1af4bc7 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.10.1</version>
+  <version>1.10.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 fa8223f..8b849db 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.10.1</version>
+  <version>1.10.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
index 0c96a88..e05ebc9 100644
--- a/docs/plugins/inspect/plugin-timecode.xml
+++ b/docs/plugins/inspect/plugin-timecode.xml
@@ -3,7 +3,7 @@
   <description>Timecode-related elements</description>
   <filename>../../gst/timecode/.libs/libgsttimecode.so</filename>
   <basename>libgsttimecode.so</basename>
-  <version>1.10.1</version>
+  <version>1.10.2</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-uvch264.xml b/docs/plugins/inspect/plugin-uvch264.xml
index 321591b..d0ec4c7 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.10.1</version>
+  <version>1.10.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 2685d26..73c14e7 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.10.1</version>
+  <version>1.10.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 c272243..92e5a81 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.10.1</version>
+  <version>1.10.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 95710c2..1e01dd7 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.10.1</version>
+  <version>1.10.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 9aebfca..cb2c42b 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.10.1</version>
+  <version>1.10.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 bfb66f9..ac92a0b 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.10.1</version>
+  <version>1.10.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 507c47d..a420050 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.10.1</version>
+  <version>1.10.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 62dc452..af2f4b6 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.10.1</version>
+  <version>1.10.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 0f8ca26..0952d4b 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.10.1</version>
+  <version>1.10.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 5671b2f..99aef7a 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.10.1</version>
+  <version>1.10.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 08b8028..bfec6f4 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.10.1</version>
+  <version>1.10.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 78fff60..98e8be9 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.10.1</version>
+  <version>1.10.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 3b1a1c7..e3e4d32 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.10.1</version>
+  <version>1.10.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 b1e86df..b58cb39 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.10.1</version>
+  <version>1.10.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 d7d3771..351642d 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.10.1</version>
+  <version>1.10.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 4996de5..d7c00c6 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.10.1</version>
+  <version>1.10.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 24aaed9..3cd3107 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.10.1</version>
+  <version>1.10.2</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/ext/dash/gstdashdemux.c b/ext/dash/gstdashdemux.c
index 242a7c2..271f70f 100644
--- a/ext/dash/gstdashdemux.c
+++ b/ext/dash/gstdashdemux.c
@@ -2676,6 +2676,10 @@
     g_object_unref (dash_stream->sidx_adapter);
   if (dash_stream->isobmff_adapter)
     g_object_unref (dash_stream->isobmff_adapter);
+  if (dash_stream->moof)
+    gst_isoff_moof_box_free (dash_stream->moof);
+  if (dash_stream->moof_sync_samples)
+    g_array_free (dash_stream->moof_sync_samples, TRUE);
 }
 
 static GstDashDemuxClockDrift *
diff --git a/ext/dash/gstmpdparser.c b/ext/dash/gstmpdparser.c
index e6d7283..15d6d98 100644
--- a/ext/dash/gstmpdparser.c
+++ b/ext/dash/gstmpdparser.c
@@ -985,11 +985,11 @@
     goto error;
   }
   /* skip leading/trailing whitespace */
-  while (strchr (" \t", str[0])) {
+  while (g_ascii_isspace (str[0])) {
     str++;
     len--;
   }
-  while (len > 0 && strchr (" \t", str[len - 1]))
+  while (len > 0 && g_ascii_isspace (str[len - 1]))
     --len;
 
   /* read "P" for period */
diff --git a/ext/hls/gsthlsdemux.c b/ext/hls/gsthlsdemux.c
index bb91f30..9247d45 100644
--- a/ext/hls/gsthlsdemux.c
+++ b/ext/hls/gsthlsdemux.c
@@ -296,7 +296,7 @@
   GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
   GstFormat format;
   GstSeekFlags flags;
-  GstSeekType start_type, stop_type;
+  GstSeekType start_type, stop_type, target_type;
   gint64 start, stop;
   gdouble rate, old_rate;
   GList *walk, *stream_walk;
@@ -348,6 +348,7 @@
     /* 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 =
@@ -358,66 +359,73 @@
     current_pos = 0;
     reverse = rate < 0;
     target_pos = reverse ? stop : start;
+    target_type = reverse ? stop_type : start_type;
 
-    /* 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);
+    if (target_type == GST_SEEK_TYPE_NONE && !(flags & GST_SEEK_FLAG_FLUSH)) {
+      /* No need to move */
+      gst_segment_do_seek (&demux->segment, rate, format, flags, start_type,
+          start, stop_type, stop, NULL);
+    } else {
+      /* 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);
 
-    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;
+      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;
-      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;
-    }
-
-    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);
-    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 (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 (walk == NULL) {
+        GST_DEBUG_OBJECT (demux, "seeking further than track duration");
+        current_sequence++;
+      }
+
+      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 (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);
+      }
     }
   }
 
diff --git a/ext/hls/m3u8.c b/ext/hls/m3u8.c
index 2f22c13..788743f 100644
--- a/ext/hls/m3u8.c
+++ b/ext/hls/m3u8.c
@@ -33,7 +33,7 @@
 
 static GstM3U8MediaFile *gst_m3u8_media_file_new (gchar * uri,
     gchar * title, GstClockTime duration, guint sequence);
-gchar *uri_join (const gchar * uri, const gchar * path);
+static gchar *uri_join (const gchar * uri, const gchar * path);
 
 GstM3U8 *
 gst_m3u8_new (void)
diff --git a/gst-libs/gst/gl/Makefile.am b/gst-libs/gst/gl/Makefile.am
index f7c24a3..f29cb71 100644
--- a/gst-libs/gst/gl/Makefile.am
+++ b/gst-libs/gst/gl/Makefile.am
@@ -167,6 +167,7 @@
 		$(GL_CFLAGS) \
 		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \
 		--library=libgstgl-@GST_API_VERSION@.la \
 		--include=Gst-@GST_API_VERSION@ \
 		--include=GstBase-@GST_API_VERSION@ \
@@ -198,6 +199,7 @@
 		--includedir=$(builddir) \
 		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \
 		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
 CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
diff --git a/gst-libs/gst/gl/Makefile.in b/gst-libs/gst/gl/Makefile.in
index 0c18cd1..16e666d 100644
--- a/gst-libs/gst/gl/Makefile.in
+++ b/gst-libs/gst/gl/Makefile.in
@@ -1728,6 +1728,7 @@
 @HAVE_INTROSPECTION_TRUE@		$(GL_CFLAGS) \
 @HAVE_INTROSPECTION_TRUE@		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+@HAVE_INTROSPECTION_TRUE@		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		--library=libgstgl-@GST_API_VERSION@.la \
 @HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--include=GstBase-@GST_API_VERSION@ \
@@ -1750,6 +1751,7 @@
 @HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
 @HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+@HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/gst-libs/gst/gl/gstglcontext.c b/gst-libs/gst/gl/gstglcontext.c
index eb46e6c..975f7d8 100644
--- a/gst-libs/gst/gl/gstglcontext.c
+++ b/gst-libs/gst/gl/gstglcontext.c
@@ -201,6 +201,7 @@
   /* conditions */
   GMutex render_lock;
   GCond create_cond;
+  GCond destroy_cond;
 
   gboolean created;
   gboolean alive;
@@ -272,6 +273,7 @@
   g_mutex_init (&context->priv->render_lock);
 
   g_cond_init (&context->priv->create_cond);
+  g_cond_init (&context->priv->destroy_cond);
   context->priv->created = FALSE;
 
   g_weak_ref_init (&context->priv->other_context_ref, NULL);
@@ -656,22 +658,20 @@
     gst_gl_window_set_resize_callback (context->window, NULL, NULL, NULL);
     gst_gl_window_set_draw_callback (context->window, NULL, NULL, NULL);
 
+    g_mutex_lock (&context->priv->render_lock);
     if (context->priv->alive) {
       GST_INFO_OBJECT (context, "send quit gl window loop");
       gst_gl_window_quit (context->window);
 
       GST_INFO_OBJECT (context, "joining 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);
-      }
+      while (context->priv->alive)
+        g_cond_wait (&context->priv->destroy_cond, &context->priv->render_lock);
       GST_INFO_OBJECT (context, "gl thread joined");
+
+      g_thread_unref (context->priv->gl_thread);
       context->priv->gl_thread = NULL;
     }
+    g_mutex_unlock (&context->priv->render_lock);
 
     gst_gl_window_set_close_callback (context->window, NULL, NULL, NULL);
     gst_object_unref (context->window);
@@ -690,6 +690,7 @@
   g_mutex_clear (&context->priv->render_lock);
 
   g_cond_clear (&context->priv->create_cond);
+  g_cond_clear (&context->priv->destroy_cond);
 
   g_free (context->priv->gl_exts);
   g_weak_ref_clear (&context->priv->other_context_ref);
@@ -1290,6 +1291,7 @@
   }
 
   context->priv->created = FALSE;
+  g_cond_signal (&context->priv->destroy_cond);
   g_mutex_unlock (&context->priv->render_lock);
 
   return NULL;
diff --git a/gst-libs/gst/gl/gstglwindow.c b/gst-libs/gst/gl/gstglwindow.c
index 3ac2441..7a275e4 100644
--- a/gst-libs/gst/gl/gstglwindow.c
+++ b/gst-libs/gst/gl/gstglwindow.c
@@ -142,35 +142,12 @@
 static gboolean
 gst_gl_window_default_open (GstGLWindow * window, GError ** error)
 {
-  GstGLWindowPrivate *priv = window->priv;
-
-  if (g_main_context_get_thread_default ()) {
-    if (priv->main_context)
-      g_main_context_unref (priv->main_context);
-    if (priv->loop)
-      g_main_loop_unref (priv->loop);
-    priv->main_context = g_main_context_ref_thread_default ();
-    priv->loop = NULL;
-    priv->alive = TRUE;
-  } else {
-    g_main_context_push_thread_default (priv->main_context);
-  }
-
   return TRUE;
 }
 
 static void
 gst_gl_window_default_close (GstGLWindow * window)
 {
-  GstGLWindowPrivate *priv = window->priv;
-
-  if (!priv->loop) {
-    priv->alive = FALSE;
-    g_main_context_unref (priv->main_context);
-    priv->main_context = NULL;
-  } else {
-    g_main_context_pop_thread_default (priv->main_context);
-  }
 }
 
 static void
@@ -543,7 +520,29 @@
 static void
 gst_gl_window_default_run (GstGLWindow * window)
 {
-  g_main_loop_run (window->priv->loop);
+  GstGLWindowPrivate *priv = window->priv;
+
+  if (g_main_context_get_thread_default ()) {
+    if (priv->main_context)
+      g_main_context_unref (priv->main_context);
+    if (priv->loop)
+      g_main_loop_unref (priv->loop);
+    priv->main_context = g_main_context_ref_thread_default ();
+    priv->loop = NULL;
+    priv->alive = TRUE;
+  } else {
+    g_main_context_push_thread_default (priv->main_context);
+  }
+
+  g_main_loop_run (priv->loop);
+
+  if (!priv->loop) {
+    priv->alive = FALSE;
+    g_main_context_unref (priv->main_context);
+    priv->main_context = NULL;
+  } else {
+    g_main_context_pop_thread_default (priv->main_context);
+  }
 }
 
 /**
diff --git a/gst-libs/gst/gl/x11/gstglcontext_glx.c b/gst-libs/gst/gl/x11/gstglcontext_glx.c
index bc83230..f3a3821 100644
--- a/gst-libs/gst/gl/x11/gstglcontext_glx.c
+++ b/gst-libs/gst/gl/x11/gstglcontext_glx.c
@@ -190,7 +190,7 @@
   GstGLContextGLX *context_glx;
   GstGLWindow *window;
   GstGLWindowX11 *window_x11;
-  GstGLDisplay *display;
+  GstGLDisplay *display = NULL;
   gboolean create_context;
   const char *glx_exts;
   Display *device;
@@ -198,6 +198,14 @@
 
   context_glx = GST_GL_CONTEXT_GLX (context);
   window = gst_gl_context_get_window (context);
+
+  if (!GST_IS_GL_WINDOW_X11 (window)) {
+    g_set_error (error, GST_GL_CONTEXT_ERROR,
+        GST_GL_CONTEXT_ERROR_WRONG_CONFIG,
+        "Cannot create an GLX context from a non-X11 window");
+    goto failure;
+  }
+
   window_x11 = GST_GL_WINDOW_X11 (window);
   display = gst_gl_context_get_display (context);
 
@@ -213,6 +221,12 @@
   }
 
   device = (Display *) gst_gl_display_get_handle (display);
+  if (!device) {
+    g_set_error (error, GST_GL_CONTEXT_ERROR,
+        GST_GL_CONTEXT_ERROR_RESOURCE_UNAVAILABLE, "Invalid Display handle");
+    goto failure;
+  }
+
   glx_exts = glXQueryExtensionsString (device, DefaultScreen (device));
 
   create_context = gst_gl_check_extension ("GLX_ARB_create_context", glx_exts);
@@ -277,7 +291,8 @@
 failure:
   if (window)
     gst_object_unref (window);
-  gst_object_unref (display);
+  if (display)
+    gst_object_unref (display);
 
   return FALSE;
 }
@@ -312,8 +327,21 @@
 
   context_glx = GST_GL_CONTEXT_GLX (context);
   window = gst_gl_context_get_window (context);
+
+  if (!GST_IS_GL_WINDOW_X11 (window)) {
+    g_set_error (error, GST_GL_CONTEXT_ERROR,
+        GST_GL_CONTEXT_ERROR_WRONG_CONFIG,
+        "Cannot create an GLX context from a non-X11 window");
+    goto failure;
+  }
   window_x11 = GST_GL_WINDOW_X11 (window);
+
   device = (Display *) gst_gl_display_get_handle (window->display);
+  if (!device) {
+    g_set_error (error, GST_GL_CONTEXT_ERROR,
+        GST_GL_CONTEXT_ERROR_RESOURCE_UNAVAILABLE, "Invalid Display handle");
+    goto failure;
+  }
 
   if (!glXQueryExtension (device, &error_base, &event_base)) {
     g_set_error (error, GST_GL_CONTEXT_ERROR,
diff --git a/gst-libs/gst/mpegts/gstmpegtssection.c b/gst-libs/gst/mpegts/gstmpegtssection.c
index dc62ac3..5222024 100644
--- a/gst-libs/gst/mpegts/gstmpegtssection.c
+++ b/gst-libs/gst/mpegts/gstmpegtssection.c
@@ -414,7 +414,7 @@
 _parse_pat (GstMpegtsSection * section)
 {
   GPtrArray *pat;
-  guint16 i = 0, nb_programs;
+  guint16 i, nb_programs;
   GstMpegtsPatProgram *program;
   guint8 *data, *end;
 
@@ -430,7 +430,9 @@
       g_ptr_array_new_full (nb_programs,
       (GDestroyNotify) _mpegts_pat_program_free);
 
-  while (data < end - 4) {
+  GST_LOG ("nb_programs %u", nb_programs);
+
+  for (i = 0; i < nb_programs; i++) {
     program = g_slice_new0 (GstMpegtsPatProgram);
     program->program_number = GST_READ_UINT16_BE (data);
     data += 2;
@@ -439,8 +441,6 @@
     data += 2;
 
     g_ptr_array_index (pat, i) = program;
-
-    i++;
   }
   pat->len = nb_programs;
 
@@ -632,7 +632,8 @@
 {
   if (pmt->descriptors)
     g_ptr_array_unref (pmt->descriptors);
-  g_ptr_array_unref (pmt->streams);
+  if (pmt->streams)
+    g_ptr_array_unref (pmt->streams);
   g_slice_free (GstMpegtsPMT, pmt);
 }
 
@@ -714,6 +715,11 @@
     i += 1;
   }
 
+  /* Section length was longer than the actual content of the PMT */
+  if (data < end - 4)
+    goto error;
+
+  /* Ensure we did not read after the end of our array */
   g_assert (data == end - 4);
 
   return (gpointer) pmt;
@@ -1178,13 +1184,20 @@
   GstMpegtsSection *res = NULL;
   guint8 tmp;
   guint8 table_id;
-  guint16 section_length;
+  guint16 section_length = 0;
+
+  /* The smallest section ever is 3 bytes */
+  if (G_UNLIKELY (data_size < 3))
+    goto short_packet;
 
   /* Check for length */
   section_length = GST_READ_UINT16_BE (data + 1) & 0x0FFF;
   if (G_UNLIKELY (data_size < section_length + 3))
     goto short_packet;
 
+  GST_LOG ("data_size:%" G_GSIZE_FORMAT " section_length:%u",
+      data_size, section_length);
+
   /* Table id is in first byte */
   table_id = *data;
 
@@ -1199,6 +1212,13 @@
   /* section_length (already parsed) : 12 bit */
   res->section_length = section_length + 3;
   if (!res->short_section) {
+    /* A long packet needs to be at least 11 bytes long
+     * _ 3 for the bytes above
+     * _ 5 for the bytes below
+     * _ 4 for the CRC */
+    if (G_UNLIKELY (data_size < 11))
+      goto bad_long_packet;
+
     /* CRC is after section_length (-4 for the size of the CRC) */
     res->crc = GST_READ_UINT32_BE (res->data + res->section_length - 4);
     /* Skip to after section_length */
@@ -1228,6 +1248,13 @@
     g_free (data);
     return NULL;
   }
+bad_long_packet:
+  {
+    GST_WARNING ("PID 0x%04x long section is too short (%" G_GSIZE_FORMAT
+        " bytes, need at least 11)", pid, data_size);
+    gst_mpegts_section_unref (res);
+    return NULL;
+  }
 }
 
 /**
diff --git a/gst-plugins-bad.doap b/gst-plugins-bad.doap
index f00eab5..78fe530 100644
--- a/gst-plugins-bad.doap
+++ b/gst-plugins-bad.doap
@@ -35,6 +35,16 @@
 
  <release>
   <Version>
+   <revision>1.10.2</revision>
+   <branch>1.10</branch>
+   <name></name>
+   <created>2016-11-29</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.10.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.10.1</revision>
    <branch>1.10</branch>
    <name></name>
diff --git a/gst-plugins-bad.spec b/gst-plugins-bad.spec
index df8dc00..87a344f 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.10.1
+Version: 1.10.2
 Release: 1.gst
 # The freeze and nfs plugins are LGPLv2 (only)
 License: LGPLv2+ and LGPLv2
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c
index 16fb8ff..cc46ebb 100644
--- a/gst/mpegtsdemux/mpegtspacketizer.c
+++ b/gst/mpegtsdemux/mpegtspacketizer.c
@@ -928,7 +928,7 @@
   MpegTSPacketizerStream *stream;
   gboolean long_packet;
   guint8 pointer = 0, table_id;
-  guint16 subtable_extension = 0;
+  guint16 subtable_extension;
   gsize to_read;
   guint section_length;
   /* data points to the current read location
@@ -1051,9 +1051,16 @@
       res = section;
   }
 
-  /* FIXME : We need at least 8 bytes with current algorithm :(
+section_start:
+  subtable_extension = 0;
+  version_number = 0;
+  last_section_number = 0;
+  section_number = 0;
+  table_id = 0;
+
+  /* FIXME : We need at least 3 bytes (or 8 for long packets) with current algorithm :(
    * We might end up losing sections that start across two packets (srsl...) */
-  if (data > packet->data_end - 8 || *data == 0xff) {
+  if (data > packet->data_end - 3 || *data == 0xff) {
     /* flush stuffing bytes and leave */
     mpegts_packetizer_clear_section (stream);
     goto out;
@@ -1062,8 +1069,6 @@
   /* We have more data to process ... */
   GST_DEBUG ("PID 0x%04x, More section present in packet (remaining bytes:%"
       G_GSIZE_FORMAT ")", stream->pid, (gsize) (packet->data_end - data));
-
-section_start:
   GST_MEMDUMP ("section_start", data, packet->data_end - data);
   data_start = data;
   /* Beginning of a new section */
@@ -1116,6 +1121,10 @@
   data += 2;
 
   if (long_packet) {
+    /* Do we have enough data for a long packet? */
+    if (data > packet->data_end - 5)
+      goto out;
+
     /* subtable_extension (always present, we are in a long section) */
     /* subtable extension              : 16 bit */
     subtable_extension = GST_READ_UINT16_BE (data);
@@ -1864,14 +1873,20 @@
 static inline void
 _append_group_values (PCROffsetGroup * group, PCROffset pcroffset)
 {
-  group->last_value++;
-  /* Resize values if needed */
-  if (G_UNLIKELY (group->nb_allocated == group->last_value)) {
-    group->nb_allocated += DEFAULT_ALLOCATED_OFFSET;
-    group->values =
-        g_realloc (group->values, group->nb_allocated * sizeof (PCROffset));
+  /* Only append if new values */
+  if (group->values[group->last_value].offset == pcroffset.offset &&
+      group->values[group->last_value].pcr == pcroffset.pcr) {
+    GST_DEBUG ("Same values, ignoring");
+  } else {
+    group->last_value++;
+    /* Resize values if needed */
+    if (G_UNLIKELY (group->nb_allocated == group->last_value)) {
+      group->nb_allocated += DEFAULT_ALLOCATED_OFFSET;
+      group->values =
+          g_realloc (group->values, group->nb_allocated * sizeof (PCROffset));
+    }
+    group->values[group->last_value] = pcroffset;
   }
-  group->values[group->last_value] = pcroffset;
 
   GST_DEBUG ("First PCR:%" GST_TIME_FORMAT " offset:%" G_GUINT64_FORMAT
       " PCR_offset:%" GST_TIME_FORMAT,
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c
index fe0c3a6..c701c37 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -1870,6 +1870,7 @@
   if (demux->requested_program_number == program->program_number ||
       (demux->requested_program_number == -1 && demux->program_number == -1)) {
     GList *tmp;
+    gboolean have_pads = FALSE;
 
     GST_LOG ("program %d started", program->program_number);
     demux->program_number = program->program_number;
@@ -1906,6 +1907,8 @@
     for (tmp = program->stream_list; tmp; tmp = tmp->next) {
       TSDemuxStream *stream = (TSDemuxStream *) tmp->data;
       activate_pad_for_stream (demux, stream);
+      if (stream->pad)
+        have_pads = TRUE;
     }
 
     /* If there was a previous program, now is the time to deactivate it
@@ -1915,6 +1918,16 @@
       mpegts_base_deactivate_and_free_program (base, demux->previous_program);
       demux->previous_program = NULL;
     }
+
+    if (!have_pads) {
+      /* If we had no pads, this stream is likely corrupted or unsupported and
+       * there's not much we can do at this point */
+      GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE,
+          ("This stream contains no valid or supported streams."),
+          ("activating program but got no pads"));
+      return;
+    }
+
     /* If any of the stream is sparse, push a GAP event before anything else
      * This is done here, and not in activate_pad_for_stream() because pushing
      * a GAP event *is* considering data, and we want to ensure the (potential)
@@ -1930,6 +1943,7 @@
         gst_pad_push_event (stream->pad, gst_event_new_gap (0, 0));
       }
     }
+
     gst_element_no_more_pads ((GstElement *) demux);
   }
 }
diff --git a/gst/mxf/Makefile.am b/gst/mxf/Makefile.am
index 2d87907..17ce6e4 100644
--- a/gst/mxf/Makefile.am
+++ b/gst/mxf/Makefile.am
@@ -16,8 +16,7 @@
 	mxfjpeg2000.c \
 	mxfd10.c \
 	mxfup.c \
-	mxfvc3.c \
-	mxfdms1.c
+	mxfvc3.c
 
 libgstmxf_la_CFLAGS = \
 	-I$(top_srcdir)/gst-libs \
@@ -50,5 +49,4 @@
 	mxfjpeg2000.h \
 	mxfd10.h \
 	mxfup.h \
-	mxfvc3.h \
-	mxfdms1.h
+	mxfvc3.h
diff --git a/gst/mxf/Makefile.in b/gst/mxf/Makefile.in
index 21ddb86..91aad56 100644
--- a/gst/mxf/Makefile.in
+++ b/gst/mxf/Makefile.in
@@ -173,8 +173,7 @@
 	libgstmxf_la-mxfaes-bwf.lo libgstmxf_la-mxfmpeg.lo \
 	libgstmxf_la-mxfdv-dif.lo libgstmxf_la-mxfalaw.lo \
 	libgstmxf_la-mxfjpeg2000.lo libgstmxf_la-mxfd10.lo \
-	libgstmxf_la-mxfup.lo libgstmxf_la-mxfvc3.lo \
-	libgstmxf_la-mxfdms1.lo
+	libgstmxf_la-mxfup.lo libgstmxf_la-mxfvc3.lo
 libgstmxf_la_OBJECTS = $(am_libgstmxf_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -814,8 +813,7 @@
 	mxfjpeg2000.c \
 	mxfd10.c \
 	mxfup.c \
-	mxfvc3.c \
-	mxfdms1.c
+	mxfvc3.c
 
 libgstmxf_la_CFLAGS = \
 	-I$(top_srcdir)/gst-libs \
@@ -849,8 +847,7 @@
 	mxfjpeg2000.h \
 	mxfd10.h \
 	mxfup.h \
-	mxfvc3.h \
-	mxfdms1.h
+	mxfvc3.h
 
 all: all-am
 
@@ -935,7 +932,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmxf_la-mxfalaw.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmxf_la-mxfd10.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmxf_la-mxfdemux.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmxf_la-mxfdms1.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmxf_la-mxfdv-dif.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmxf_la-mxfessence.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstmxf_la-mxfjpeg2000.Plo@am__quote@
@@ -1084,13 +1080,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmxf_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmxf_la_CFLAGS) $(CFLAGS) -c -o libgstmxf_la-mxfvc3.lo `test -f 'mxfvc3.c' || echo '$(srcdir)/'`mxfvc3.c
 
-libgstmxf_la-mxfdms1.lo: mxfdms1.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstmxf_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmxf_la_CFLAGS) $(CFLAGS) -MT libgstmxf_la-mxfdms1.lo -MD -MP -MF $(DEPDIR)/libgstmxf_la-mxfdms1.Tpo -c -o libgstmxf_la-mxfdms1.lo `test -f 'mxfdms1.c' || echo '$(srcdir)/'`mxfdms1.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstmxf_la-mxfdms1.Tpo $(DEPDIR)/libgstmxf_la-mxfdms1.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mxfdms1.c' object='libgstmxf_la-mxfdms1.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 $(libgstmxf_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstmxf_la_CFLAGS) $(CFLAGS) -c -o libgstmxf_la-mxfdms1.lo `test -f 'mxfdms1.c' || echo '$(srcdir)/'`mxfdms1.c
-
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/gst/mxf/mxf.c b/gst/mxf/mxf.c
index 324462b..135a16e 100644
--- a/gst/mxf/mxf.c
+++ b/gst/mxf/mxf.c
@@ -25,7 +25,7 @@
 #include "mxfquark.h"
 #include "mxfdemux.h"
 #include "mxfmux.h"
-#include "mxfdms1.h"
+/*#include "mxfdms1.h"*/
 #include "mxfaes-bwf.h"
 #include "mxfalaw.h"
 #include "mxfd10.h"
@@ -59,7 +59,7 @@
   mxf_init ();
   mxf_quark_initialize ();
   mxf_metadata_init_types ();
-  mxf_dms1_initialize ();
+/*  mxf_dms1_initialize ();*/
   mxf_aes_bwf_init ();
   mxf_alaw_init ();
   mxf_d10_init ();
diff --git a/gst/mxf/mxfaes-bwf.c b/gst/mxf/mxfaes-bwf.c
index 633f3af..f92d682 100644
--- a/gst/mxf/mxfaes-bwf.c
+++ b/gst/mxf/mxfaes-bwf.c
@@ -643,11 +643,14 @@
       tag_data += 8;
       tag_size -= 8;
 
-      if (tag_size != len * 24)
+      if (tag_size / 24 != len)
+        goto error;
+
+      if (G_MAXINT / (24 + sizeof (guint8 *)) < len)
         goto error;
 
       self->fixed_channel_status_data =
-          g_malloc0 (len * sizeof (guint8 *) + len * 24);
+          g_malloc0 (len * (sizeof (guint8 *) + 24));
 
       for (i = 0; i < len; i++) {
         self->fixed_channel_status_data[i] =
@@ -738,10 +741,13 @@
       tag_data += 8;
       tag_size -= 8;
 
-      if (tag_size != len * 24)
+      if (tag_size / 24 != len)
         goto error;
 
-      self->fixed_user_data = g_malloc0 (len * sizeof (guint8 *) + len * 24);
+      if (G_MAXINT / (24 + sizeof (guint8 *)) < len)
+        goto error;
+
+      self->fixed_user_data = g_malloc0 (len * (sizeof (guint8 *) + 24));
 
       for (i = 0; i < len; i++) {
         self->fixed_user_data[i] =
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
index 823b1b6..a380f6d 100644
--- a/gst/mxf/mxfdemux.c
+++ b/gst/mxf/mxfdemux.c
@@ -1304,6 +1304,9 @@
     return GST_FLOW_OK;
   }
 
+  if (gst_buffer_get_size (buffer) == 0)
+    return GST_FLOW_OK;
+
   gst_buffer_map (buffer, &map, GST_MAP_READ);
   metadata =
       mxf_metadata_new (type, &demux->current_partition->primer, demux->offset,
@@ -1768,7 +1771,7 @@
 
       index->offset = demux->offset - demux->run_in;
       index->keyframe = keyframe;
-    } else {
+    } else if (etrack->position < G_MAXINT) {
       GstMXFDemuxIndex index;
 
       index.offset = demux->offset - demux->run_in;
@@ -2330,13 +2333,11 @@
   buffer = NULL;
 
   if (demux->current_partition->partition.header_byte_count == 0) {
-    if (demux->current_partition->partition.prev_partition == 0
-        || demux->current_partition->partition.this_partition == 0)
+    if (demux->current_partition->partition.this_partition == 0)
       goto out;
 
     demux->offset =
-        demux->run_in + demux->current_partition->partition.this_partition -
-        demux->current_partition->partition.prev_partition;
+        demux->run_in + demux->current_partition->partition.prev_partition;
     goto next_try;
   }
 
@@ -2345,10 +2346,10 @@
         gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buffer,
         &read);
     if (G_UNLIKELY (flow != GST_FLOW_OK)) {
+      if (!demux->current_partition->partition.prev_partition)
+        goto out;
       demux->offset =
-          demux->run_in +
-          demux->current_partition->partition.this_partition -
-          demux->current_partition->partition.prev_partition;
+          demux->run_in + demux->current_partition->partition.prev_partition;
       goto next_try;
     }
 
@@ -2363,9 +2364,10 @@
           demux->offset += read;
           gst_buffer_unref (buffer);
           buffer = NULL;
+          if (!demux->current_partition->partition.prev_partition)
+            goto out;
           demux->offset =
               demux->run_in +
-              demux->current_partition->partition.this_partition -
               demux->current_partition->partition.prev_partition;
           goto next_try;
         }
@@ -2377,10 +2379,10 @@
     } else {
       gst_buffer_unref (buffer);
       buffer = NULL;
+      if (!demux->current_partition->partition.prev_partition)
+        goto out;
       demux->offset =
-          demux->run_in +
-          demux->current_partition->partition.this_partition -
-          demux->current_partition->partition.prev_partition;
+          demux->run_in + demux->current_partition->partition.prev_partition;
       goto next_try;
     }
   }
@@ -2393,10 +2395,10 @@
         gst_mxf_demux_pull_klv_packet (demux, demux->offset, &key, &buffer,
         &read);
     if (G_UNLIKELY (flow != GST_FLOW_OK)) {
+      if (!demux->current_partition->partition.prev_partition)
+        goto out;
       demux->offset =
-          demux->run_in +
-          demux->current_partition->partition.this_partition -
-          demux->current_partition->partition.prev_partition;
+          demux->run_in + demux->current_partition->partition.prev_partition;
       goto next_try;
     }
 
@@ -2408,10 +2410,10 @@
 
       if (G_UNLIKELY (flow != GST_FLOW_OK)) {
         gst_mxf_demux_reset_metadata (demux);
+        if (!demux->current_partition->partition.prev_partition)
+          goto out;
         demux->offset =
-            demux->run_in +
-            demux->current_partition->partition.this_partition -
-            demux->current_partition->partition.prev_partition;
+            demux->run_in + demux->current_partition->partition.prev_partition;
         goto next_try;
       }
     } else if (mxf_is_descriptive_metadata (&key)) {
@@ -2438,13 +2440,13 @@
   }
 
   /* resolve references etc */
-
-  if (gst_mxf_demux_resolve_references (demux) !=
+  if (!demux->preface || gst_mxf_demux_resolve_references (demux) !=
       GST_FLOW_OK || gst_mxf_demux_update_tracks (demux) != GST_FLOW_OK) {
     demux->current_partition->parsed_metadata = TRUE;
+    if (!demux->current_partition->partition.prev_partition)
+      goto out;
     demux->offset =
-        demux->run_in + demux->current_partition->partition.this_partition -
-        demux->current_partition->partition.prev_partition;
+        demux->run_in + demux->current_partition->partition.prev_partition;
     goto next_try;
   }
 
@@ -3066,7 +3068,11 @@
 
     if (flow == GST_FLOW_EOS) {
       /* perform EOS logic */
-      if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+      if (demux->src->len == 0) {
+        GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE,
+            ("This stream contains no data."),
+            ("got eos and didn't find any streams"));
+      } else if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
         gint64 stop;
         GstMessage *m;
         GstEvent *e;
@@ -3556,11 +3562,18 @@
 
     start = segment->index_start_position;
     end = start + segment->index_duration;
+    if (end > G_MAXINT / sizeof (GstMXFDemuxIndex)) {
+      demux->index_tables = g_list_remove (demux->index_tables, t);
+      g_array_free (t->offsets, TRUE);
+      g_free (t);
+      continue;
+    }
 
     if (t->offsets->len < end)
       g_array_set_size (t->offsets, end);
 
-    for (i = 0; i < segment->n_index_entries; i++) {
+    for (i = 0; i < segment->n_index_entries && start + i < t->offsets->len;
+        i++) {
       GstMXFDemuxIndex *index =
           &g_array_index (t->offsets, GstMXFDemuxIndex, start + i);
       guint64 offset = segment->index_entries[i].stream_offset;
@@ -4075,6 +4088,12 @@
       GstMXFDemuxPad *p = NULL;
       guint i;
 
+      if (demux->src->len == 0) {
+        GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE,
+            ("This stream contains no data."),
+            ("got eos and didn't find any streams"));
+      }
+
       for (i = 0; i < demux->essence_tracks->len; i++) {
         GstMXFDemuxEssenceTrack *t =
             &g_array_index (demux->essence_tracks, GstMXFDemuxEssenceTrack, i);
diff --git a/gst/mxf/mxfdms1.c b/gst/mxf/mxfdms1.c
deleted file mode 100644
index d5d5d95..0000000
--- a/gst/mxf/mxfdms1.c
+++ /dev/null
@@ -1,5656 +0,0 @@
-/* GStreamer
- * Copyright (C) 2008-2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* Implementation of SMPTE S380M - Descriptive Metadata Scheme-1 */
-
-/* TODO:
- *   - What are the "locators"?
- *   - Create sensible tags from this
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <string.h>
-
-#include "mxfdms1.h"
-#include "mxftypes.h"
-
-GST_DEBUG_CATEGORY_EXTERN (mxf_debug);
-#define GST_CAT_DEFAULT mxf_debug
-
-G_DEFINE_ABSTRACT_TYPE (MXFDMS1, mxf_dms1, MXF_TYPE_DESCRIPTIVE_METADATA);
-
-static gboolean
-mxf_dms1_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
-    guint16 tag, const guint8 * tag_data, guint tag_size)
-{
-  MXFDMS1 *self = MXF_DMS1 (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 instance_uid_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x01,
-    0x01, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 generation_uid_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, 0x05,
-    0x20, 0x07, 0x01, 0x08, 0x00, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &instance_uid_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-    memcpy (&MXF_METADATA_BASE (self)->instance_uid, tag_data, 16);
-    GST_DEBUG ("  instance uid = %s",
-        mxf_uuid_to_string (&MXF_METADATA_BASE (self)->instance_uid, str));
-  } else if (memcmp (tag_ul, &generation_uid_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-    memcpy (&MXF_METADATA_BASE (self)->generation_uid, tag_data, 16);
-    GST_DEBUG ("  generation uid = %s",
-        mxf_uuid_to_string (&MXF_METADATA_BASE (self)->generation_uid, str));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 local tag 0x%04x of size %u", tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_init (MXFDMS1 * self)
-{
-}
-
-static void
-mxf_dms1_class_init (MXFDMS1Class * klass)
-{
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  metadatabase_class->handle_tag = mxf_dms1_handle_tag;
-  dm_class->scheme = 0x01;
-}
-
-G_DEFINE_ABSTRACT_TYPE (MXFDMS1TextLanguage, mxf_dms1_text_language,
-    MXF_TYPE_DMS1);
-
-static gboolean
-mxf_dms1_text_language_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1TextLanguage *self = MXF_DMS1_TEXT_LANGUAGE (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 extended_text_language_code_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x03,
-    0x01, 0x01, 0x02, 0x02, 0x11, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &extended_text_language_code_ul, 16) == 0) {
-    if (tag_size > 12)
-      goto error;
-
-    memcpy (self->extended_text_language_code, tag_data, tag_size);
-    GST_DEBUG ("  extended text language code = %s",
-        self->extended_text_language_code);
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_text_language_parent_class)->handle_tag (metadata, primer,
-        tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 text language local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_text_language_init (MXFDMS1TextLanguage * self)
-{
-}
-
-static void
-mxf_dms1_text_language_class_init (MXFDMS1TextLanguageClass * klass)
-{
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-
-  metadatabase_class->handle_tag = mxf_dms1_text_language_handle_tag;
-}
-
-G_DEFINE_ABSTRACT_TYPE (MXFDMS1Thesaurus, mxf_dms1_thesaurus,
-    MXF_TYPE_DMS1_TEXT_LANGUAGE);
-
-static void
-mxf_dms1_thesaurus_finalize (GObject * object)
-{
-  MXFDMS1Thesaurus *self = MXF_DMS1_THESAURUS (object);
-
-  g_free (self->thesaurus_name);
-  self->thesaurus_name = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_thesaurus_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_thesaurus_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Thesaurus *self = MXF_DMS1_THESAURUS (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 thesaurus_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x03,
-    0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &thesaurus_name_ul, 16) == 0) {
-    self->thesaurus_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  thesaurus name  = %s", GST_STR_NULL (self->thesaurus_name));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_thesaurus_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-}
-
-static void
-mxf_dms1_thesaurus_init (MXFDMS1Thesaurus * self)
-{
-}
-
-static void
-mxf_dms1_thesaurus_class_init (MXFDMS1ThesaurusClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-
-  object_class->finalize = mxf_dms1_thesaurus_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_thesaurus_handle_tag;
-}
-
-static void
-mxf_dms1_framework_interface_init (gpointer g_iface, gpointer iface_data)
-{
-}
-
-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (MXFDMS1Framework, mxf_dms1_framework,
-    MXF_TYPE_DMS1,
-    G_IMPLEMENT_INTERFACE (MXF_TYPE_DESCRIPTIVE_METADATA_FRAMEWORK,
-        mxf_dms1_framework_interface_init));
-
-static void
-mxf_dms1_framework_finalize (GObject * object)
-{
-  MXFDMS1Framework *self = MXF_DMS1_FRAMEWORK (object);
-
-  g_free (self->framework_thesaurus_name);
-  self->framework_thesaurus_name = NULL;
-
-  g_free (self->framework_title);
-  self->framework_title = NULL;
-
-  g_free (self->metadata_server_locators_uids);
-  self->metadata_server_locators_uids = NULL;
-
-  g_free (self->titles_sets_uids);
-  self->titles_sets_uids = NULL;
-
-  g_free (self->titles_sets);
-  self->titles_sets = NULL;
-
-  g_free (self->annotation_sets_uids);
-  self->annotation_sets_uids = NULL;
-
-  g_free (self->annotation_sets);
-  self->annotation_sets = NULL;
-
-  g_free (self->participant_sets_uids);
-  self->participant_sets_uids = NULL;
-
-  g_free (self->participant_sets);
-  self->participant_sets = NULL;
-
-  g_free (self->location_sets_uids);
-  self->location_sets_uids = NULL;
-
-  g_free (self->location_sets);
-  self->location_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_framework_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_framework_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Framework *self = MXF_DMS1_FRAMEWORK (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->titles_sets)
-    memset (self->titles_sets, 0, sizeof (gpointer) * self->n_titles_sets);
-  else
-    self->titles_sets = g_new0 (MXFDMS1Titles *, self->n_titles_sets);
-
-  if (self->annotation_sets)
-    memset (self->annotation_sets, 0,
-        sizeof (gpointer) * self->n_annotation_sets);
-  else
-    self->annotation_sets =
-        g_new0 (MXFDMS1Annotation *, self->n_annotation_sets);
-
-  if (self->participant_sets)
-    memset (self->participant_sets, 0,
-        sizeof (gpointer) * self->n_participant_sets);
-  else
-    self->participant_sets =
-        g_new0 (MXFDMS1Participant *, self->n_participant_sets);
-
-  if (self->location_sets)
-    memset (self->location_sets, 0, sizeof (gpointer) * self->n_location_sets);
-  else
-    self->location_sets = g_new0 (MXFDMS1Location *, self->n_location_sets);
-
-  for (i = 0; i < self->n_titles_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->titles_sets_uids[i]);
-
-    if (current && MXF_IS_DMS1_TITLES (current)) {
-      self->titles_sets[i] = MXF_DMS1_TITLES (current);
-    }
-  }
-
-  for (i = 0; i < self->n_annotation_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->annotation_sets_uids[i]);
-    if (current && MXF_IS_DMS1_ANNOTATION (current)) {
-      self->annotation_sets[i] = MXF_DMS1_ANNOTATION (current);
-    }
-  }
-
-  for (i = 0; i < self->n_participant_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->participant_sets_uids[i]);
-    if (current && MXF_IS_DMS1_PARTICIPANT (current)) {
-      self->participant_sets[i] = MXF_DMS1_PARTICIPANT (current);
-    }
-  }
-
-  current = g_hash_table_lookup (metadata, &self->contacts_list_set_uid);
-  if (current && MXF_IS_DMS1_CONTACTS_LIST (current)) {
-    self->contacts_list_set = MXF_DMS1_CONTACTS_LIST (current);
-  }
-
-  for (i = 0; i < self->n_location_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->location_sets_uids[i]);
-    if (current && MXF_IS_DMS1_LOCATION (current)) {
-      self->location_sets[i] = MXF_DMS1_LOCATION (current);
-    }
-  }
-
-  return MXF_METADATA_BASE_CLASS (mxf_dms1_framework_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_framework_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Framework *self = MXF_DMS1_FRAMEWORK (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 framework_extended_text_language_code_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x03,
-    0x01, 0x01, 0x02, 0x02, 0x13, 0x00, 0x00
-  };
-  static const guint8 framework_thesaurus_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x02, 0x01, 0x02, 0x15, 0x01, 0x00, 0x00
-  };
-  static const guint8 framework_title_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x01,
-    0x05, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 primary_extended_spoken_language_code_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x03,
-    0x01, 0x01, 0x02, 0x03, 0x11, 0x00, 0x00
-  };
-  static const guint8 secondary_extended_spoken_language_code_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x03,
-    0x01, 0x01, 0x02, 0x03, 0x12, 0x00, 0x00
-  };
-  static const guint8 original_extended_spoken_language_code_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x03,
-    0x01, 0x01, 0x02, 0x03, 0x13, 0x00, 0x00
-  };
-  static const guint8 metadata_server_locators_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x06, 0x0C, 0x00, 0x00
-  };
-  static const guint8 titles_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x04, 0x00
-  };
-  static const guint8 annotation_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x0d, 0x00
-  };
-  static const guint8 participant_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x13, 0x00
-  };
-  static const guint8 contacts_list_set_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x02, 0x40, 0x22, 0x00
-  };
-  static const guint8 location_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x03, 0x40, 0x16, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &framework_extended_text_language_code_ul, 16) == 0) {
-    if (tag_size > 12)
-      goto error;
-    memcpy (&self->framework_extended_text_language_code, tag_data, tag_size);
-    GST_DEBUG ("  framework extended text language code = %s",
-        self->framework_extended_text_language_code);
-  } else if (memcmp (tag_ul, &framework_thesaurus_name_ul, 16) == 0) {
-    self->framework_thesaurus_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  framework thesaurus name = %s",
-        GST_STR_NULL (self->framework_thesaurus_name));
-  } else if (memcmp (tag_ul, &framework_title_ul, 16) == 0) {
-    self->framework_title = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  framework title = %s", GST_STR_NULL (self->framework_title));
-  } else if (memcmp (tag_ul, &primary_extended_spoken_language_code_ul,
-          16) == 0) {
-    if (tag_size > 12)
-      goto error;
-    memcpy (&self->primary_extended_spoken_language_code, tag_data, tag_size);
-    GST_DEBUG ("  primary extended spoken language code = %s",
-        self->primary_extended_spoken_language_code);
-  } else if (memcmp (tag_ul, &secondary_extended_spoken_language_code_ul,
-          16) == 0) {
-    if (tag_size > 12)
-      goto error;
-    memcpy (&self->secondary_extended_spoken_language_code, tag_data, tag_size);
-    GST_DEBUG ("  secondary extended spoken language code = %s",
-        self->secondary_extended_spoken_language_code);
-  } else if (memcmp (tag_ul, &original_extended_spoken_language_code_ul,
-          16) == 0) {
-    if (tag_size > 12)
-      goto error;
-    memcpy (&self->original_extended_spoken_language_code, tag_data, tag_size);
-    GST_DEBUG ("  original extended spoken language code = %s",
-        self->original_extended_spoken_language_code);
-  } else if (memcmp (tag_ul, &metadata_server_locators_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->metadata_server_locators_uids,
-            &self->n_metadata_server_locators, tag_data, tag_size))
-      goto error;
-
-    GST_DEBUG ("  number of metadata server locators = %u",
-        self->n_metadata_server_locators);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_metadata_server_locators; i++) {
-        GST_DEBUG ("    metadata server locator %u = %s", i,
-            mxf_uuid_to_string (&self->metadata_server_locators_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &titles_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->titles_sets_uids, &self->n_titles_sets,
-            tag_data, tag_size))
-      goto error;
-
-    GST_DEBUG ("  number of titles sets = %u", self->n_titles_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_titles_sets; i++) {
-        GST_DEBUG ("    titles sets %u = %s", i,
-            mxf_uuid_to_string (&self->titles_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &annotation_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->annotation_sets_uids,
-            &self->n_annotation_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of annotation sets = %u", self->n_annotation_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_annotation_sets; i++) {
-        GST_DEBUG ("    annotation sets %u = %s", i,
-            mxf_uuid_to_string (&self->annotation_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &participant_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->participant_sets_uids,
-            &self->n_participant_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of participant sets = %u", self->n_participant_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_participant_sets; i++) {
-        GST_DEBUG ("    participant sets %u = %s", i,
-            mxf_uuid_to_string (&self->participant_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &contacts_list_set_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-
-    memcpy (&self->contacts_list_set_uid, tag_data, 16);
-    GST_DEBUG ("  contacts list = %s",
-        mxf_uuid_to_string (&self->contacts_list_set_uid, str));
-  } else if (memcmp (tag_ul, &location_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->location_sets_uids,
-            &self->n_location_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of location sets = %u", self->n_location_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_location_sets; i++) {
-        GST_DEBUG ("    location sets %u = %s", i,
-            mxf_uuid_to_string (&self->location_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_framework_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 framework local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_framework_init (MXFDMS1Framework * self)
-{
-}
-
-static void
-mxf_dms1_framework_class_init (MXFDMS1FrameworkClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-
-  object_class->finalize = mxf_dms1_framework_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_framework_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_framework_resolve;
-}
-
-G_DEFINE_ABSTRACT_TYPE (MXFDMS1ProductionClipFramework,
-    mxf_dms1_production_clip_framework, MXF_TYPE_DMS1_FRAMEWORK);
-
-static void
-mxf_dms1_production_clip_framework_finalize (GObject * object)
-{
-  MXFDMS1ProductionClipFramework *self =
-      MXF_DMS1_PRODUCTION_CLIP_FRAMEWORK (object);
-
-  g_free (self->captions_description_sets_uids);
-  self->captions_description_sets_uids = NULL;
-
-  g_free (self->captions_description_sets);
-  self->captions_description_sets = NULL;
-
-  g_free (self->contract_sets_uids);
-  self->contract_sets_uids = NULL;
-
-  g_free (self->contract_sets);
-  self->contract_sets = NULL;
-
-  G_OBJECT_CLASS
-      (mxf_dms1_production_clip_framework_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_production_clip_framework_resolve (MXFMetadataBase * m,
-    GHashTable * metadata)
-{
-  MXFDMS1ProductionClipFramework *self = MXF_DMS1_PRODUCTION_CLIP_FRAMEWORK (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->captions_description_sets)
-    memset (self->captions_description_sets, 0,
-        sizeof (gpointer) * self->n_captions_description_sets);
-  else
-    self->captions_description_sets =
-        g_new0 (MXFDMS1CaptionsDescription *,
-        self->n_captions_description_sets);
-
-  if (self->contract_sets)
-    memset (self->contract_sets, 0,
-        sizeof (gpointer) * self->n_captions_description_sets);
-  else
-    self->contract_sets = g_new0 (MXFDMS1Contract *, self->n_contract_sets);
-
-  current = g_hash_table_lookup (metadata, &self->picture_format_set_uid);
-  if (current && MXF_IS_DMS1_PICTURE_FORMAT (current)) {
-    self->picture_format = MXF_DMS1_PICTURE_FORMAT (current);
-  }
-
-  for (i = 0; i < self->n_captions_description_sets; i++) {
-    current =
-        g_hash_table_lookup (metadata,
-        &self->captions_description_sets_uids[i]);
-    if (current && MXF_IS_DMS1_CAPTIONS_DESCRIPTION (current)) {
-      self->captions_description_sets[i] =
-          MXF_DMS1_CAPTIONS_DESCRIPTION (current);
-    }
-  }
-
-  for (i = 0; i < self->n_contract_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->contract_sets_uids[i]);
-    if (current && MXF_IS_DMS1_CONTRACT (current)) {
-      self->contract_sets[i] = MXF_DMS1_CONTRACT (current);
-    }
-  }
-
-  current = g_hash_table_lookup (metadata, &self->project_set_uid);
-  if (current && MXF_IS_DMS1_PROJECT (current)) {
-    self->project_set = MXF_DMS1_PROJECT (current);
-  }
-
-  return
-      MXF_METADATA_BASE_CLASS
-      (mxf_dms1_production_clip_framework_parent_class)->resolve (m, metadata);
-}
-
-static gboolean
-mxf_dms1_production_clip_framework_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1ProductionClipFramework *self =
-      MXF_DMS1_PRODUCTION_CLIP_FRAMEWORK (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 picture_format_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x02, 0x40, 0x1d, 0x00
-  };
-  static const guint8 captions_description_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x0c, 0x00
-  };
-  static const guint8 contract_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x19, 0x00
-  };
-  static const guint8 project_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x02, 0x40, 0x21, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &picture_format_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-
-    memcpy (&self->picture_format_set_uid, tag_data, 16);
-    GST_DEBUG ("  picture format set = %s",
-        mxf_uuid_to_string (&self->picture_format_set_uid, str));
-  } else if (memcmp (tag_ul, &captions_description_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->captions_description_sets_uids,
-            &self->n_captions_description_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of captions description sets = %u",
-        self->n_captions_description_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_captions_description_sets; i++) {
-        GST_DEBUG ("    captions description sets %u = %s", i,
-            mxf_uuid_to_string (&self->captions_description_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &contract_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->contract_sets_uids,
-            &self->n_contract_sets, tag_data, tag_size))
-      goto error;
-
-    GST_DEBUG ("  number of contract sets = %u", self->n_contract_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_contract_sets; i++) {
-        GST_DEBUG ("    contract sets %u = %s", i,
-            mxf_uuid_to_string (&self->contract_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &project_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-
-    memcpy (&self->project_set_uid, tag_data, 16);
-    GST_DEBUG ("  project set = %s", mxf_uuid_to_string (&self->project_set_uid,
-            str));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_production_clip_framework_parent_class)->handle_tag (metadata,
-        primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR
-      ("Invalid DMS1 production-clip framework local tag 0x%04x of size %u",
-      tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_production_clip_framework_init (MXFDMS1ProductionClipFramework * self)
-{
-}
-
-static void
-    mxf_dms1_production_clip_framework_class_init
-    (MXFDMS1ProductionClipFrameworkClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-
-  object_class->finalize = mxf_dms1_production_clip_framework_finalize;
-  metadatabase_class->handle_tag =
-      mxf_dms1_production_clip_framework_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_production_clip_framework_resolve;
-}
-
-G_DEFINE_TYPE (MXFDMS1ProductionFramework, mxf_dms1_production_framework,
-    MXF_TYPE_DMS1_PRODUCTION_CLIP_FRAMEWORK);
-
-static void
-mxf_dms1_production_framework_finalize (GObject * object)
-{
-  MXFDMS1ProductionFramework *self = MXF_DMS1_PRODUCTION_FRAMEWORK (object);
-
-  g_free (self->integration_indication);
-  self->integration_indication = NULL;
-
-  g_free (self->identification_sets_uids);
-  self->identification_sets_uids = NULL;
-
-  g_free (self->identification_sets);
-  self->identification_sets = NULL;
-
-  g_free (self->group_relationship_sets_uids);
-  self->group_relationship_sets_uids = NULL;
-
-  g_free (self->group_relationship_sets);
-  self->group_relationship_sets = NULL;
-
-  g_free (self->branding_sets_uids);
-  self->branding_sets_uids = NULL;
-
-  g_free (self->branding_sets);
-  self->branding_sets = NULL;
-
-  g_free (self->event_sets_uids);
-  self->event_sets_uids = NULL;
-
-  g_free (self->event_sets);
-  self->event_sets = NULL;
-
-  g_free (self->award_sets_uids);
-  self->award_sets_uids = NULL;
-
-  g_free (self->award_sets);
-  self->award_sets = NULL;
-
-  g_free (self->setting_period_sets_uids);
-  self->setting_period_sets_uids = NULL;
-
-  g_free (self->setting_period_sets);
-  self->setting_period_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_production_framework_parent_class)->finalize
-      (object);
-}
-
-static gboolean
-mxf_dms1_production_framework_resolve (MXFMetadataBase * m,
-    GHashTable * metadata)
-{
-  MXFDMS1ProductionFramework *self = MXF_DMS1_PRODUCTION_FRAMEWORK (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->identification_sets)
-    memset (self->identification_sets, 0,
-        sizeof (gpointer) * self->n_identification_sets);
-  else
-    self->identification_sets =
-        g_new0 (MXFDMS1Identification *, self->n_identification_sets);
-
-  if (self->group_relationship_sets)
-    memset (self->group_relationship_sets, 0,
-        sizeof (gpointer) * self->n_group_relationship_sets);
-  else
-    self->group_relationship_sets =
-        g_new0 (MXFDMS1GroupRelationship *, self->n_group_relationship_sets);
-
-  if (self->branding_sets)
-    memset (self->branding_sets, 0, sizeof (gpointer) * self->n_branding_sets);
-  else
-    self->branding_sets = g_new0 (MXFDMS1Branding *, self->n_branding_sets);
-
-  if (self->event_sets)
-    memset (self->event_sets, 0, sizeof (gpointer) * self->n_event_sets);
-  else
-    self->event_sets = g_new0 (MXFDMS1Event *, self->n_event_sets);
-
-  if (self->award_sets)
-    memset (self->award_sets, 0, sizeof (gpointer) * self->n_award_sets);
-  else
-    self->award_sets = g_new0 (MXFDMS1Award *, self->n_award_sets);
-
-  if (self->setting_period_sets)
-    memset (self->setting_period_sets, 0,
-        sizeof (gpointer) * self->n_setting_period_sets);
-  else
-    self->setting_period_sets =
-        g_new0 (MXFDMS1SettingPeriod *, self->n_setting_period_sets);
-
-  for (i = 0; i < self->n_identification_sets; i++) {
-    current =
-        g_hash_table_lookup (metadata, &self->identification_sets_uids[i]);
-    if (current && MXF_IS_DMS1_IDENTIFICATION (current)) {
-      self->identification_sets[i] = MXF_DMS1_IDENTIFICATION (current);
-    }
-  }
-
-  for (i = 0; i < self->n_group_relationship_sets; i++) {
-    current =
-        g_hash_table_lookup (metadata, &self->group_relationship_sets_uids[i]);
-    if (current && MXF_IS_DMS1_GROUP_RELATIONSHIP (current)) {
-      self->group_relationship_sets[i] = MXF_DMS1_GROUP_RELATIONSHIP (current);
-    }
-  }
-
-  for (i = 0; i < self->n_branding_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->branding_sets_uids[i]);
-    if (current && MXF_IS_DMS1_BRANDING (current)) {
-      self->branding_sets[i] = MXF_DMS1_BRANDING (current);
-    }
-  }
-
-  for (i = 0; i < self->n_event_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->event_sets_uids[i]);
-    if (current && MXF_IS_DMS1_EVENT (current)) {
-      self->event_sets[i] = MXF_DMS1_EVENT (current);
-    }
-  }
-
-  for (i = 0; i < self->n_award_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->award_sets_uids[i]);
-    if (current && MXF_IS_DMS1_AWARD (current)) {
-      self->award_sets[i] = MXF_DMS1_AWARD (current);
-    }
-  }
-
-  for (i = 0; i < self->n_setting_period_sets; i++) {
-    current =
-        g_hash_table_lookup (metadata, &self->setting_period_sets_uids[i]);
-    if (current && MXF_IS_DMS1_SETTING_PERIOD (current)) {
-      self->setting_period_sets[i] = MXF_DMS1_SETTING_PERIOD (current);
-    }
-  }
-
-  return
-      MXF_METADATA_BASE_CLASS
-      (mxf_dms1_production_framework_parent_class)->resolve (m, metadata);
-}
-
-static gboolean
-mxf_dms1_production_framework_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1ProductionFramework *self = MXF_DMS1_PRODUCTION_FRAMEWORK (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 integration_indication_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x05,
-    0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 identification_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x06, 0x00
-  };
-  static const guint8 group_relationship_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x05, 0x00
-  };
-  static const guint8 branding_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x08, 0x00
-  };
-  static const guint8 event_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x09, 0x00
-  };
-  static const guint8 award_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x0b, 0x00
-  };
-  static const guint8 setting_period_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x0e, 0x01
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &integration_indication_ul, 16) == 0) {
-    self->integration_indication = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  integration indication = %s",
-        GST_STR_NULL (self->integration_indication));
-  } else if (memcmp (tag_ul, &identification_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->identification_sets_uids,
-            &self->n_identification_sets, tag_data, tag_size))
-      goto error;
-
-    GST_DEBUG ("  number of identification sets = %u",
-        self->n_identification_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_identification_sets; i++) {
-        GST_DEBUG ("    identification sets %u = %s", i,
-            mxf_uuid_to_string (&self->identification_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &group_relationship_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->group_relationship_sets_uids,
-            &self->n_group_relationship_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of group relationship sets = %u",
-        self->n_group_relationship_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_group_relationship_sets; i++) {
-        GST_DEBUG ("    group relationship sets %u = %s", i,
-            mxf_uuid_to_string (&self->group_relationship_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &branding_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->branding_sets_uids,
-            &self->n_branding_sets, tag_data, tag_size))
-      goto error;
-
-    GST_DEBUG ("  number of branding sets = %u", self->n_branding_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_branding_sets; i++) {
-        GST_DEBUG ("    branding sets %u = %s", i,
-            mxf_uuid_to_string (&self->branding_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &event_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->event_sets_uids, &self->n_event_sets,
-            tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of event sets = %u", self->n_event_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_event_sets; i++) {
-        GST_DEBUG ("    event sets %u = %s", i,
-            mxf_uuid_to_string (&self->event_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &award_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->award_sets_uids, &self->n_award_sets,
-            tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of award sets = %u", self->n_award_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_award_sets; i++) {
-        GST_DEBUG ("    award sets %u = %s", i,
-            mxf_uuid_to_string (&self->award_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &setting_period_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->setting_period_sets_uids,
-            &self->n_setting_period_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of setting period sets = %u",
-        self->n_setting_period_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_setting_period_sets; i++) {
-        GST_DEBUG ("    setting period sets %u = %s", i,
-            mxf_uuid_to_string (&self->setting_period_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_production_framework_parent_class)->handle_tag (metadata,
-        primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 production framework local tag 0x%04x of size %u",
-      tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_production_framework_init (MXFDMS1ProductionFramework * self)
-{
-}
-
-static void
-mxf_dms1_production_framework_class_init (MXFDMS1ProductionFrameworkClass *
-    klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_production_framework_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_production_framework_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_production_framework_resolve;
-
-  dm_class->type = 0x010100;
-}
-
-G_DEFINE_TYPE (MXFDMS1ClipFramework, mxf_dms1_clip_framework,
-    MXF_TYPE_DMS1_PRODUCTION_CLIP_FRAMEWORK);
-
-static void
-mxf_dms1_clip_framework_finalize (GObject * object)
-{
-  MXFDMS1ClipFramework *self = MXF_DMS1_CLIP_FRAMEWORK (object);
-
-  g_free (self->clip_kind);
-  self->clip_kind = NULL;
-
-  g_free (self->slate_information);
-  self->slate_information = NULL;
-
-  g_free (self->scripting_sets_uids);
-  self->scripting_sets_uids = NULL;
-
-  g_free (self->scripting_sets);
-  self->scripting_sets = NULL;
-
-  g_free (self->shot_sets_uids);
-  self->shot_sets_uids = NULL;
-
-  g_free (self->shot_sets);
-  self->shot_sets = NULL;
-
-  g_free (self->device_parameters_sets_uids);
-  self->device_parameters_sets_uids = NULL;
-
-  g_free (self->device_parameters_sets);
-  self->device_parameters_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_clip_framework_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_clip_framework_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1ClipFramework *self = MXF_DMS1_CLIP_FRAMEWORK (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->scripting_sets)
-    memset (self->scripting_sets, 0,
-        sizeof (gpointer) * self->n_scripting_sets);
-  else
-    self->scripting_sets = g_new0 (MXFDMS1Scripting *, self->n_scripting_sets);
-
-  if (self->shot_sets)
-    memset (self->shot_sets, 0, sizeof (gpointer) * self->n_shot_sets);
-  else
-    self->shot_sets = g_new0 (MXFDMS1Shot *, self->n_shot_sets);
-
-  if (self->device_parameters_sets)
-    memset (self->device_parameters_sets, 0,
-        sizeof (gpointer) * self->n_device_parameters_sets);
-  else
-    self->device_parameters_sets =
-        g_new0 (MXFDMS1DeviceParameters *, self->n_device_parameters_sets);
-
-  for (i = 0; i < self->n_scripting_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->scripting_sets_uids[i]);
-
-    if (current && MXF_IS_DMS1_SCRIPTING (current)) {
-      self->scripting_sets[i] = MXF_DMS1_SCRIPTING (current);
-    }
-  }
-
-  for (i = 0; i < self->n_shot_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->shot_sets_uids[i]);
-    if (current && MXF_IS_DMS1_SHOT (current)) {
-      self->shot_sets[i] = MXF_DMS1_SHOT (current);
-    }
-  }
-
-  for (i = 0; i < self->n_device_parameters_sets; i++) {
-    current =
-        g_hash_table_lookup (metadata, &self->device_parameters_sets_uids[i]);
-    if (current && MXF_IS_DMS1_DEVICE_PARAMETERS (current)) {
-      self->device_parameters_sets[i] = MXF_DMS1_DEVICE_PARAMETERS (current);
-    }
-  }
-
-  current = g_hash_table_lookup (metadata, &self->processing_set_uid);
-  if (current && MXF_IS_DMS1_PROCESSING (current)) {
-    self->processing_set = MXF_DMS1_PROCESSING (current);
-  }
-
-  return
-      MXF_METADATA_BASE_CLASS (mxf_dms1_clip_framework_parent_class)->resolve
-      (m, metadata);
-}
-
-static gboolean
-mxf_dms1_clip_framework_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1ClipFramework *self = MXF_DMS1_CLIP_FRAMEWORK (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[96];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 clip_kind_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x02, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 clip_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x01,
-    0x05, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 extended_clip_id_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x01,
-    0x01, 0x15, 0x09, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 clip_creation_date_and_time_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x07,
-    0x02, 0x01, 0x10, 0x01, 0x04, 0x00, 0x00
-  };
-  static const guint8 take_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x01,
-    0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 slate_information_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x03,
-    0x02, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 scripting_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x0f, 0x00
-  };
-  static const guint8 shot_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x11, 0x02
-  };
-  static const guint8 device_parameters_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x1e, 0x00
-  };
-  static const guint8 processing_set_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x02, 0x40, 0x20, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &clip_kind_ul, 16) == 0) {
-    self->clip_kind = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  clip kind = %s", GST_STR_NULL (self->clip_kind));
-  } else if (memcmp (tag_ul, &clip_number_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->clip_number, tag_data, tag_size);
-    GST_DEBUG ("  clip number = %s", self->clip_number);
-  } else if (memcmp (tag_ul, &extended_clip_id_ul, 16) == 0) {
-    if (tag_size != 32 && tag_size != 64)
-      goto error;
-
-    memcpy (self->extended_clip_id, tag_data, tag_size);
-    self->extended_clip_id_full = (tag_size == 64);
-
-    GST_DEBUG ("  extended clip id (1) = %s",
-        mxf_umid_to_string ((MXFUMID *) & self->extended_clip_id, str));
-    if (tag_size == 64)
-      GST_DEBUG ("  extended clip id (2) = %s",
-          mxf_umid_to_string ((MXFUMID *) & self->extended_clip_id[32], str));
-  } else if (memcmp (tag_ul, &clip_creation_date_and_time_ul, 16) == 0) {
-    if (!mxf_timestamp_parse (&self->clip_creation_date_and_time, tag_data,
-            tag_size))
-      goto error;
-    GST_DEBUG ("  clip creation date and time = %s",
-        mxf_timestamp_to_string (&self->clip_creation_date_and_time, str));
-  } else if (memcmp (tag_ul, &take_number_ul, 16) == 0) {
-    if (tag_size != 2)
-      goto error;
-
-    self->take_number = GST_READ_UINT16_BE (tag_data);
-    GST_DEBUG ("  take number = %u", self->take_number);
-  } else if (memcmp (tag_ul, &slate_information_ul, 16) == 0) {
-    self->slate_information = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  slate information = %s",
-        GST_STR_NULL (self->slate_information));
-  } else if (memcmp (tag_ul, &scripting_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->scripting_sets_uids,
-            &self->n_scripting_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of scripting sets = %u", self->n_scripting_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_scripting_sets; i++) {
-        GST_DEBUG ("    scripting sets %u = %s", i,
-            mxf_uuid_to_string (&self->scripting_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &shot_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->shot_sets_uids, &self->n_shot_sets,
-            tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of shot sets = %u", self->n_shot_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_shot_sets; i++) {
-        GST_DEBUG ("    shot sets %u = %s", i,
-            mxf_uuid_to_string (&self->shot_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &device_parameters_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->device_parameters_sets_uids,
-            &self->n_device_parameters_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of device parameters sets = %u",
-        self->n_device_parameters_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_device_parameters_sets; i++) {
-        GST_DEBUG ("    device parameters sets %u = %s", i,
-            mxf_uuid_to_string (&self->device_parameters_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &processing_set_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-
-    memcpy (&self->processing_set_uid, tag_data, 16);
-    GST_DEBUG ("  processing set = %s",
-        mxf_uuid_to_string (&self->processing_set_uid, str));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_clip_framework_parent_class)->handle_tag (metadata, primer,
-        tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 clip framework local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_clip_framework_init (MXFDMS1ClipFramework * self)
-{
-}
-
-static void
-mxf_dms1_clip_framework_class_init (MXFDMS1ClipFrameworkClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_clip_framework_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_clip_framework_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_clip_framework_resolve;
-  dm_class->type = 0x010200;
-}
-
-G_DEFINE_TYPE (MXFDMS1SceneFramework, mxf_dms1_scene_framework,
-    MXF_TYPE_DMS1_FRAMEWORK);
-
-static void
-mxf_dms1_scene_framework_finalize (GObject * object)
-{
-  MXFDMS1SceneFramework *self = MXF_DMS1_SCENE_FRAMEWORK (object);
-
-  g_free (self->setting_period_sets_uids);
-  self->setting_period_sets_uids = NULL;
-
-  g_free (self->setting_period_sets);
-  self->setting_period_sets = NULL;
-
-  g_free (self->shot_scene_sets_uids);
-  self->shot_scene_sets_uids = NULL;
-
-  g_free (self->shot_scene_sets);
-  self->shot_scene_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_scene_framework_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_scene_framework_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1SceneFramework *self = MXF_DMS1_SCENE_FRAMEWORK (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->setting_period_sets)
-    memset (self->setting_period_sets, 0,
-        sizeof (gpointer) * self->n_setting_period_sets);
-  else
-    self->setting_period_sets =
-        g_new0 (MXFDMS1SettingPeriod *, self->n_setting_period_sets);
-
-  if (self->shot_scene_sets)
-    memset (self->shot_scene_sets, 0,
-        sizeof (gpointer) * self->n_shot_scene_sets);
-  else
-    self->shot_scene_sets = g_new0 (MXFDMS1Shot *, self->n_shot_scene_sets);
-
-  for (i = 0; i < self->n_setting_period_sets; i++) {
-    current =
-        g_hash_table_lookup (metadata, &self->setting_period_sets_uids[i]);
-    if (current && MXF_IS_DMS1_SETTING_PERIOD (current)) {
-      self->setting_period_sets[i] = MXF_DMS1_SETTING_PERIOD (current);
-    }
-  }
-
-  for (i = 0; i < self->n_shot_scene_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->shot_scene_sets_uids[i]);
-    if (current && MXF_IS_DMS1_SHOT (current)) {
-      self->shot_scene_sets[i] = MXF_DMS1_SHOT (current);
-    }
-  }
-
-  return
-      MXF_METADATA_BASE_CLASS (mxf_dms1_scene_framework_parent_class)->resolve
-      (m, metadata);
-}
-
-static gboolean
-mxf_dms1_scene_framework_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1SceneFramework *self = MXF_DMS1_SCENE_FRAMEWORK (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 scene_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x01,
-    0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 setting_period_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x0e, 0x02
-  };
-  static const guint8 shot_scene_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x11, 0x01
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &scene_number_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->scene_number, tag_data, tag_size);
-    GST_DEBUG ("  scene number = %s", self->scene_number);
-  } else if (memcmp (tag_ul, &setting_period_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->setting_period_sets_uids,
-            &self->n_setting_period_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of setting period sets = %u",
-        self->n_setting_period_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_setting_period_sets; i++) {
-        GST_DEBUG ("    setting period sets %u = %s", i,
-            mxf_uuid_to_string (&self->setting_period_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &shot_scene_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->shot_scene_sets_uids,
-            &self->n_shot_scene_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of shot sets = %u", self->n_shot_scene_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_shot_scene_sets; i++) {
-        GST_DEBUG ("    shot sets %u = %s", i,
-            mxf_uuid_to_string (&self->shot_scene_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_scene_framework_parent_class)->handle_tag (metadata, primer,
-        tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 scene framework local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_scene_framework_init (MXFDMS1SceneFramework * self)
-{
-}
-
-static void
-mxf_dms1_scene_framework_class_init (MXFDMS1SceneFrameworkClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_scene_framework_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_scene_framework_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_scene_framework_resolve;
-  dm_class->type = 0x010300;
-}
-
-G_DEFINE_TYPE (MXFDMS1Titles, mxf_dms1_titles, MXF_TYPE_DMS1_TEXT_LANGUAGE);
-
-static void
-mxf_dms1_titles_finalize (GObject * object)
-{
-  MXFDMS1Titles *self = MXF_DMS1_TITLES (object);
-
-  g_free (self->main_title);
-  self->main_title = NULL;
-
-  g_free (self->secondary_title);
-  self->secondary_title = NULL;
-
-  g_free (self->working_title);
-  self->working_title = NULL;
-
-  g_free (self->original_title);
-  self->original_title = NULL;
-
-  g_free (self->version_title);
-  self->version_title = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_titles_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_titles_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
-    guint16 tag, const guint8 * tag_data, guint tag_size)
-{
-  MXFDMS1Titles *self = MXF_DMS1_TITLES (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 main_title_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x01,
-    0x05, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 secondary_title_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x01,
-    0x05, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 working_title_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x01,
-    0x05, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 original_title_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x01,
-    0x05, 0x0b, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 version_title_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x01,
-    0x05, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &main_title_ul, 16) == 0) {
-    self->main_title = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  main title = %s", GST_STR_NULL (self->main_title));
-  } else if (memcmp (tag_ul, &secondary_title_ul, 16) == 0) {
-    self->secondary_title = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  secondary title = %s", GST_STR_NULL (self->secondary_title));
-  } else if (memcmp (tag_ul, &working_title_ul, 16) == 0) {
-    self->working_title = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  working title = %s", GST_STR_NULL (self->working_title));
-  } else if (memcmp (tag_ul, &original_title_ul, 16) == 0) {
-    self->original_title = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  original title = %s", GST_STR_NULL (self->original_title));
-  } else if (memcmp (tag_ul, &version_title_ul, 16) == 0) {
-    self->version_title = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  version title = %s", GST_STR_NULL (self->version_title));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_titles_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-}
-
-static void
-mxf_dms1_titles_init (MXFDMS1Titles * self)
-{
-}
-
-static void
-mxf_dms1_titles_class_init (MXFDMS1TitlesClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_titles_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_titles_handle_tag;
-  dm_class->type = 0x100100;
-}
-
-G_DEFINE_TYPE (MXFDMS1Identification, mxf_dms1_identification,
-    MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_identification_finalize (GObject * object)
-{
-  MXFDMS1Identification *self = MXF_DMS1_IDENTIFICATION (object);
-
-  g_free (self->identifier_value);
-  self->identifier_value = NULL;
-
-  g_free (self->identification_issuing_authority);
-  self->identification_issuing_authority = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_identification_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_identification_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Identification *self = MXF_DMS1_IDENTIFICATION (metadata);
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 identifier_kind_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x01,
-    0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 identifier_value_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x01,
-    0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 identification_locator_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x01,
-    0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 identification_issuing_authority_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x02,
-    0x0a, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &identifier_kind_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->identifier_kind, tag_data, tag_size);
-    GST_DEBUG ("  identifier kind = %s", self->identifier_kind);
-  } else if (memcmp (tag_ul, &identifier_value_ul, 16) == 0) {
-    self->identifier_value = g_memdup (tag_data, tag_size);
-    self->identifier_value_length = tag_size;
-    GST_DEBUG ("  identifier value length = %u", tag_size);
-  } else if (memcmp (tag_ul, &identification_locator_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-
-    memcpy (&self->identification_locator, tag_data, 16);
-
-    GST_DEBUG ("  identification locator = %s",
-        mxf_uuid_to_string (&self->identification_locator, str));
-  } else if (memcmp (tag_ul, &identification_issuing_authority_ul, 16) == 0) {
-    self->identification_issuing_authority =
-        mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  identification issuing authority = %s",
-        GST_STR_NULL (self->identification_issuing_authority));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_identification_parent_class)->handle_tag (metadata, primer,
-        tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 identification local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_identification_init (MXFDMS1Identification * self)
-{
-}
-
-static void
-mxf_dms1_identification_class_init (MXFDMS1IdentificationClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_identification_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_identification_handle_tag;
-  dm_class->type = 0x110100;
-}
-
-G_DEFINE_TYPE (MXFDMS1GroupRelationship, mxf_dms1_group_relationship,
-    MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_group_relationship_finalize (GObject * object)
-{
-  MXFDMS1GroupRelationship *self = MXF_DMS1_GROUP_RELATIONSHIP (object);
-
-  g_free (self->programming_group_kind);
-  self->programming_group_kind = NULL;
-
-  g_free (self->programming_group_title);
-  self->programming_group_title = NULL;
-
-  g_free (self->group_synopsis);
-  self->group_synopsis = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_group_relationship_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_group_relationship_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1GroupRelationship *self = MXF_DMS1_GROUP_RELATIONSHIP (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 programming_group_kind_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x02,
-    0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 programming_group_title_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x02,
-    0x02, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 group_synopsis_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x02, 0x01, 0x06, 0x08, 0x01, 0x00, 0x00
-  };
-  static const guint8 numerical_position_in_sequence_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x06,
-    0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 total_number_in_the_sequence_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 episodic_start_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x02,
-    0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 episodic_end_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x02,
-    0x02, 0x05, 0x02, 0x03, 0x01, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &programming_group_kind_ul, 16) == 0) {
-    self->programming_group_kind = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  programming group kind = %s",
-        GST_STR_NULL (self->programming_group_kind));
-  } else if (memcmp (tag_ul, &programming_group_title_ul, 16) == 0) {
-    self->programming_group_title = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  programming group title = %s",
-        GST_STR_NULL (self->programming_group_title));
-  } else if (memcmp (tag_ul, &group_synopsis_ul, 16) == 0) {
-    self->group_synopsis = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  group synopsis = %s", GST_STR_NULL (self->group_synopsis));
-  } else if (memcmp (tag_ul, &numerical_position_in_sequence_ul, 16) == 0) {
-    if (tag_size != 4)
-      goto error;
-
-    self->numerical_position_in_sequence = GST_READ_UINT32_BE (tag_data);
-    GST_DEBUG ("  numerical position in sequence = %u",
-        self->numerical_position_in_sequence);
-  } else if (memcmp (tag_ul, &total_number_in_the_sequence_ul, 16) == 0) {
-    if (tag_size != 4)
-      goto error;
-
-    self->total_number_in_the_sequence = GST_READ_UINT32_BE (tag_data);
-    GST_DEBUG ("  total number in the sequence = %u",
-        self->total_number_in_the_sequence);
-  } else if (memcmp (tag_ul, &episodic_start_number_ul, 16) == 0) {
-    if (tag_size != 2)
-      goto error;
-
-    self->episodic_start_number = GST_READ_UINT16_BE (tag_data);
-    GST_DEBUG ("  episodic start number = %u", self->episodic_start_number);
-  } else if (memcmp (tag_ul, &episodic_end_number_ul, 16) == 0) {
-    if (tag_size != 2)
-      goto error;
-
-    self->episodic_end_number = GST_READ_UINT16_BE (tag_data);
-    GST_DEBUG ("  episodic end number = %u", self->episodic_end_number);
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_group_relationship_parent_class)->handle_tag (metadata,
-        primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 group relationship local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_group_relationship_init (MXFDMS1GroupRelationship * self)
-{
-}
-
-static void
-mxf_dms1_group_relationship_class_init (MXFDMS1GroupRelationshipClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_group_relationship_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_group_relationship_handle_tag;
-  dm_class->type = 0x120100;
-}
-
-G_DEFINE_TYPE (MXFDMS1Branding, mxf_dms1_branding, MXF_TYPE_DMS1_TEXT_LANGUAGE);
-
-static void
-mxf_dms1_branding_finalize (GObject * object)
-{
-  MXFDMS1Branding *self = MXF_DMS1_BRANDING (object);
-
-  g_free (self->brand_main_title);
-  self->brand_main_title = NULL;
-
-  g_free (self->brand_original_title);
-  self->brand_original_title = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_branding_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_branding_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Branding *self = MXF_DMS1_BRANDING (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 brand_main_title_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x01,
-    0x05, 0x0D, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 brand_original_title_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x01,
-    0x05, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &brand_main_title_ul, 16) == 0) {
-    self->brand_main_title = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  brand main title = %s",
-        GST_STR_NULL (self->brand_main_title));
-  } else if (memcmp (tag_ul, &brand_original_title_ul, 16) == 0) {
-    self->brand_original_title = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  brand original title = %s",
-        GST_STR_NULL (self->brand_original_title));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_branding_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-}
-
-static void
-mxf_dms1_branding_init (MXFDMS1Branding * self)
-{
-}
-
-static void
-mxf_dms1_branding_class_init (MXFDMS1BrandingClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_branding_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_branding_handle_tag;
-  dm_class->type = 0x130100;
-}
-
-G_DEFINE_TYPE (MXFDMS1Event, mxf_dms1_event, MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_event_finalize (GObject * object)
-{
-  MXFDMS1Event *self = MXF_DMS1_EVENT (object);
-
-  g_free (self->event_indication);
-  self->event_indication = NULL;
-
-  g_free (self->publication_sets_uids);
-  self->publication_sets_uids = NULL;
-
-  g_free (self->publication_sets);
-  self->publication_sets = NULL;
-
-  g_free (self->annotation_sets_uids);
-  self->annotation_sets_uids = NULL;
-
-  g_free (self->annotation_sets);
-  self->annotation_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_event_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_event_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Event *self = MXF_DMS1_EVENT (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->publication_sets)
-    memset (self->publication_sets, 0,
-        sizeof (gpointer) * self->n_publication_sets);
-  else
-    self->publication_sets =
-        g_new0 (MXFDMS1Publication *, self->n_publication_sets);
-
-  if (self->annotation_sets)
-    memset (self->annotation_sets, 0,
-        sizeof (gpointer) * self->n_annotation_sets);
-  else
-    self->annotation_sets =
-        g_new0 (MXFDMS1Annotation *, self->n_annotation_sets);
-
-  for (i = 0; i < self->n_publication_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->publication_sets_uids[i]);
-    if (current && MXF_IS_DMS1_PUBLICATION (current)) {
-      self->publication_sets[i] = MXF_DMS1_PUBLICATION (current);
-    }
-  }
-
-  for (i = 0; i < self->n_annotation_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->annotation_sets_uids[i]);
-    if (current && MXF_IS_DMS1_ANNOTATION (current)) {
-      self->annotation_sets[i] = MXF_DMS1_ANNOTATION (current);
-    }
-  }
-
-  return MXF_METADATA_BASE_CLASS (mxf_dms1_event_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_event_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
-    guint16 tag, const guint8 * tag_data, guint tag_size)
-{
-  MXFDMS1Event *self = MXF_DMS1_EVENT (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 event_indication_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x05,
-    0x01, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 event_start_date_and_time_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x07,
-    0x02, 0x01, 0x02, 0x07, 0x02, 0x00, 0x00
-  };
-  static const guint8 event_end_date_and_time_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x07,
-    0x02, 0x01, 0x02, 0x09, 0x02, 0x00, 0x00
-  };
-  static const guint8 publication_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x0a, 0x00
-  };
-  static const guint8 annotation_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x08, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x0d, 0x01
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &event_indication_ul, 16) == 0) {
-    self->event_indication = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  event indication = %s",
-        GST_STR_NULL (self->event_indication));
-  } else if (memcmp (tag_ul, &event_start_date_and_time_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->event_start_date_and_time, tag_data, tag_size);
-    GST_DEBUG ("  event start date and time = %s",
-        self->event_start_date_and_time);
-  } else if (memcmp (tag_ul, &event_end_date_and_time_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->event_end_date_and_time, tag_data, tag_size);
-    GST_DEBUG ("  event end date and time = %s", self->event_end_date_and_time);
-  } else if (memcmp (tag_ul, &publication_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->publication_sets_uids,
-            &self->n_publication_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of publication sets = %u", self->n_publication_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_publication_sets; i++) {
-        GST_DEBUG ("    publication sets %u = %s", i,
-            mxf_uuid_to_string (&self->publication_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &annotation_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->annotation_sets_uids,
-            &self->n_annotation_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of annotation sets = %u", self->n_annotation_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_annotation_sets; i++) {
-        GST_DEBUG ("    annotation sets %u = %s", i,
-            mxf_uuid_to_string (&self->annotation_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_event_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 event local tag 0x%04x of size %u", tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_event_init (MXFDMS1Event * self)
-{
-}
-
-static void
-mxf_dms1_event_class_init (MXFDMS1EventClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_event_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_event_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_event_resolve;
-  dm_class->type = 0x140100;
-}
-
-G_DEFINE_TYPE (MXFDMS1Publication, mxf_dms1_publication, MXF_TYPE_DMS1);
-
-static void
-mxf_dms1_publication_finalize (GObject * object)
-{
-  MXFDMS1Publication *self = MXF_DMS1_PUBLICATION (object);
-
-  g_free (self->publication_organisation_name);
-  self->publication_organisation_name = NULL;
-
-  g_free (self->publication_service_name);
-  self->publication_service_name = NULL;
-
-  g_free (self->publication_medium);
-  self->publication_medium = NULL;
-
-  g_free (self->publication_region);
-  self->publication_region = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_publication_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_publication_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Publication *self = MXF_DMS1_PUBLICATION (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 publication_organisation_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x02,
-    0x10, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00
-  };
-  static const guint8 publication_service_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x02,
-    0x10, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00
-  };
-  static const guint8 publication_medium_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x02,
-    0x10, 0x02, 0x01, 0x03, 0x01, 0x00, 0x00
-  };
-  static const guint8 publication_region_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x02,
-    0x10, 0x02, 0x01, 0x04, 0x01, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &publication_organisation_name_ul, 16) == 0) {
-    self->publication_organisation_name =
-        mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  publication organisation name = %s",
-        GST_STR_NULL (self->publication_organisation_name));
-  } else if (memcmp (tag_ul, &publication_service_name_ul, 16) == 0) {
-    self->publication_service_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG (" publication service name = %s",
-        GST_STR_NULL (self->publication_service_name));
-  } else if (memcmp (tag_ul, &publication_medium_ul, 16) == 0) {
-    self->publication_medium = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG (" publication medium = %s",
-        GST_STR_NULL (self->publication_medium));
-  } else if (memcmp (tag_ul, &publication_region_ul, 16) == 0) {
-    self->publication_region = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG (" publication region = %s",
-        GST_STR_NULL (self->publication_region));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_publication_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-}
-
-static void
-mxf_dms1_publication_init (MXFDMS1Publication * self)
-{
-}
-
-static void
-mxf_dms1_publication_class_init (MXFDMS1PublicationClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_publication_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_publication_handle_tag;
-  dm_class->type = 0x140200;
-}
-
-G_DEFINE_TYPE (MXFDMS1Award, mxf_dms1_award, MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_award_finalize (GObject * object)
-{
-  MXFDMS1Award *self = MXF_DMS1_AWARD (object);
-
-  g_free (self->festival);
-  self->festival = NULL;
-
-  g_free (self->award_name);
-  self->award_name = NULL;
-
-  g_free (self->award_classification);
-  self->award_classification = NULL;
-
-  g_free (self->nomination_category);
-  self->nomination_category = NULL;
-
-  g_free (self->participant_sets_uids);
-  self->participant_sets_uids = NULL;
-
-  g_free (self->participant_sets);
-  self->participant_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_award_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_award_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Award *self = MXF_DMS1_AWARD (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->participant_sets)
-    memset (self->participant_sets, 0,
-        sizeof (gpointer) * self->n_participant_sets);
-  else
-    self->participant_sets =
-        g_new0 (MXFDMS1Participant *, self->n_participant_sets);
-
-  for (i = 0; i < self->n_participant_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->participant_sets_uids[i]);
-    if (current && MXF_IS_DMS1_PARTICIPANT (current)) {
-      self->participant_sets[i] = MXF_DMS1_PARTICIPANT (current);
-    }
-  }
-
-  return MXF_METADATA_BASE_CLASS (mxf_dms1_award_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_award_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
-    guint16 tag, const guint8 * tag_data, guint tag_size)
-{
-  MXFDMS1Award *self = MXF_DMS1_AWARD (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 festival_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x03,
-    0x02, 0x02, 0x01, 0x03, 0x01, 0x00, 0x00
-  };
-  static const guint8 festival_date_and_time_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x07,
-    0x02, 0x01, 0x02, 0x07, 0x10, 0x01, 0x00
-  };
-  static const guint8 award_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x03,
-    0x02, 0x02, 0x01, 0x04, 0x01, 0x00, 0x00
-  };
-  static const guint8 award_classification_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x03,
-    0x02, 0x02, 0x01, 0x05, 0x01, 0x00, 0x00
-  };
-  static const guint8 nomination_category_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x03,
-    0x02, 0x02, 0x01, 0x06, 0x01, 0x00, 0x00
-  };
-  static const guint8 participant_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x03, 0x40, 0x13, 0x01
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &festival_ul, 16) == 0) {
-    self->festival = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  festival = %s", GST_STR_NULL (self->festival));
-  } else if (memcmp (tag_ul, &festival_date_and_time_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->festival_date_and_time, tag_data, tag_size);
-    GST_DEBUG ("  festival date and time = %s",
-        GST_STR_NULL (self->festival_date_and_time));
-  } else if (memcmp (tag_ul, &award_name_ul, 16) == 0) {
-    self->award_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  award name = %s", GST_STR_NULL (self->award_name));
-  } else if (memcmp (tag_ul, &award_classification_ul, 16) == 0) {
-    self->award_classification = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  award classification = %s",
-        GST_STR_NULL (self->award_classification));
-  } else if (memcmp (tag_ul, &nomination_category_ul, 16) == 0) {
-    self->nomination_category = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  nomination category = %s",
-        GST_STR_NULL (self->nomination_category));
-  } else if (memcmp (tag_ul, &participant_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->participant_sets_uids,
-            &self->n_participant_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of participant sets = %u", self->n_participant_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_participant_sets; i++) {
-        GST_DEBUG ("    participant sets %u = %s", i,
-            mxf_uuid_to_string (&self->participant_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_award_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 award local tag 0x%04x of size %u", tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_award_init (MXFDMS1Award * self)
-{
-}
-
-static void
-mxf_dms1_award_class_init (MXFDMS1AwardClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_award_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_award_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_award_resolve;
-  dm_class->type = 0x150100;
-}
-
-G_DEFINE_TYPE (MXFDMS1CaptionsDescription, mxf_dms1_captions_description,
-    MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_captions_description_finalize (GObject * object)
-{
-  MXFDMS1CaptionsDescription *self = MXF_DMS1_CAPTIONS_DESCRIPTION (object);
-
-  g_free (self->caption_kind);
-  self->caption_kind = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_captions_description_parent_class)->finalize
-      (object);
-}
-
-static gboolean
-mxf_dms1_captions_description_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1CaptionsDescription *self = MXF_DMS1_CAPTIONS_DESCRIPTION (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 extended_captions_language_code_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x03,
-    0x01, 0x01, 0x02, 0x02, 0x12, 0x00, 0x00
-  };
-  static const guint8 caption_kind_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x04,
-    0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &extended_captions_language_code_ul, 16) == 0) {
-    if (tag_size > 12)
-      goto error;
-
-    memcpy (self->extended_captions_language_code, tag_data, tag_size);
-    GST_DEBUG ("  extended captions language code = %s",
-        self->extended_captions_language_code);
-  } else if (memcmp (tag_ul, &caption_kind_ul, 16) == 0) {
-    self->caption_kind = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  caption kind = %s", GST_STR_NULL (self->caption_kind));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_captions_description_parent_class)->handle_tag (metadata,
-        primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 captions description local tag 0x%04x of size %u",
-      tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_captions_description_init (MXFDMS1CaptionsDescription * self)
-{
-}
-
-static void
-mxf_dms1_captions_description_class_init (MXFDMS1CaptionsDescriptionClass *
-    klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_captions_description_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_captions_description_handle_tag;
-  dm_class->type = 0x160100;
-}
-
-G_DEFINE_TYPE (MXFDMS1Annotation, mxf_dms1_annotation, MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_annotation_finalize (GObject * object)
-{
-  MXFDMS1Annotation *self = MXF_DMS1_ANNOTATION (object);
-
-  g_free (self->annotation_kind);
-  self->annotation_kind = NULL;
-
-  g_free (self->annotation_synopsis);
-  self->annotation_synopsis = NULL;
-
-  g_free (self->annotation_description);
-  self->annotation_description = NULL;
-
-  g_free (self->related_material_description);
-  self->related_material_description = NULL;
-
-  g_free (self->classification_sets_uids);
-  self->classification_sets_uids = NULL;
-
-  g_free (self->classification_sets);
-  self->classification_sets = NULL;
-
-  g_free (self->related_material_locators);
-  self->related_material_locators = NULL;
-
-  g_free (self->participant_sets_uids);
-  self->participant_sets_uids = NULL;
-
-  g_free (self->participant_sets);
-  self->participant_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_annotation_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_annotation_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Annotation *self = MXF_DMS1_ANNOTATION (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->classification_sets)
-    memset (self->classification_sets, 0,
-        sizeof (gpointer) * self->n_classification_sets);
-  else
-    self->classification_sets =
-        g_new0 (MXFDMS1Classification *, self->n_classification_sets);
-
-  if (self->participant_sets)
-    memset (self->participant_sets, 0,
-        sizeof (gpointer) * self->n_participant_sets);
-  else
-    self->participant_sets =
-        g_new0 (MXFDMS1Participant *, self->n_participant_sets);
-
-  for (i = 0; i < self->n_classification_sets; i++) {
-    current =
-        g_hash_table_lookup (metadata, &self->classification_sets_uids[i]);
-    if (current && MXF_IS_DMS1_CLASSIFICATION (current)) {
-      self->classification_sets[i] = MXF_DMS1_CLASSIFICATION (current);
-    }
-  }
-
-  current = g_hash_table_lookup (metadata, &self->cue_words_set_uid);
-  if (current && MXF_IS_DMS1_CUE_WORDS (current)) {
-    self->cue_words_set = MXF_DMS1_CUE_WORDS (current);
-  }
-
-  for (i = 0; i < self->n_participant_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->participant_sets_uids[i]);
-    if (current && MXF_IS_DMS1_PARTICIPANT (current)) {
-      self->participant_sets[i] = MXF_DMS1_PARTICIPANT (current);
-    }
-  }
-
-  return MXF_METADATA_BASE_CLASS (mxf_dms1_annotation_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_annotation_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Annotation *self = MXF_DMS1_ANNOTATION (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 annotation_kind_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x02, 0x01, 0x06, 0x0e, 0x01, 0x00, 0x00
-  };
-  static const guint8 annotation_synopsis_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x02, 0x01, 0x06, 0x09, 0x01, 0x00, 0x00
-  };
-  static const guint8 annotation_description_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x02, 0x01, 0x06, 0x0a, 0x01, 0x00, 0x00
-  };
-  static const guint8 related_material_description_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x02, 0x01, 0x06, 0x0f, 0x01, 0x00, 0x00
-  };
-  static const guint8 classification_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x10, 0x00
-  };
-  static const guint8 cue_words_set_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x02, 0x40, 0x23, 0x01
-  };
-  static const guint8 related_material_locators_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x06, 0x0d, 0x00, 0x00
-  };
-  static const guint8 participant_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x06,
-    0x01, 0x01, 0x04, 0x03, 0x40, 0x13, 0x03
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &annotation_kind_ul, 16) == 0) {
-    self->annotation_kind = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  annotation kind = %s", GST_STR_NULL (self->annotation_kind));
-  } else if (memcmp (tag_ul, &annotation_synopsis_ul, 16) == 0) {
-    self->annotation_synopsis = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  annotation synopsis = %s",
-        GST_STR_NULL (self->annotation_synopsis));
-  } else if (memcmp (tag_ul, &annotation_description_ul, 16) == 0) {
-    self->annotation_description = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  annotation description = %s",
-        GST_STR_NULL (self->annotation_description));
-  } else if (memcmp (tag_ul, &related_material_description_ul, 16) == 0) {
-    self->related_material_description = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  related material description = %s",
-        GST_STR_NULL (self->related_material_description));
-  } else if (memcmp (tag_ul, &classification_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->classification_sets_uids,
-            &self->n_classification_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of classification sets = %u",
-        self->n_classification_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_classification_sets; i++) {
-        GST_DEBUG ("    classification sets %u = %s", i,
-            mxf_uuid_to_string (&self->classification_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &cue_words_set_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-
-    memcpy (&self->cue_words_set_uid, tag_data, 16);
-    GST_DEBUG ("  cue words set = %s",
-        mxf_uuid_to_string (&self->cue_words_set_uid, str));
-  } else if (memcmp (tag_ul, &related_material_locators_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->related_material_locators,
-            &self->n_related_material_locators, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of related material locators = %u",
-        self->n_related_material_locators);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_related_material_locators; i++) {
-        GST_DEBUG ("    related material locators %u = %s", i,
-            mxf_uuid_to_string (&self->related_material_locators[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &participant_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->participant_sets_uids,
-            &self->n_participant_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of participant sets = %u", self->n_participant_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_participant_sets; i++) {
-        GST_DEBUG ("    participant sets %u = %s", i,
-            mxf_uuid_to_string (&self->participant_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_annotation_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 annotation local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_annotation_init (MXFDMS1Annotation * self)
-{
-}
-
-static void
-mxf_dms1_annotation_class_init (MXFDMS1AnnotationClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_annotation_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_annotation_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_annotation_resolve;
-  dm_class->type = 0x170100;
-}
-
-G_DEFINE_TYPE (MXFDMS1SettingPeriod, mxf_dms1_setting_period,
-    MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_setting_period_finalize (GObject * object)
-{
-  MXFDMS1SettingPeriod *self = MXF_DMS1_SETTING_PERIOD (object);
-
-  g_free (self->time_period_keyword);
-  self->time_period_keyword = NULL;
-
-  g_free (self->setting_period_description);
-  self->setting_period_description = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_setting_period_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_setting_period_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1SettingPeriod *self = MXF_DMS1_SETTING_PERIOD (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[32];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 setting_date_and_time_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x07,
-    0x02, 0x01, 0x08, 0x02, 0x00, 0x00, 0x00
-  };
-  static const guint8 time_period_keyword_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x07,
-    0x02, 0x01, 0x08, 0x01, 0x01, 0x00, 0x00
-  };
-  static const guint8 setting_period_description_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x07,
-    0x02, 0x01, 0x08, 0x03, 0x01, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &setting_date_and_time_ul, 16) == 0) {
-    if (!mxf_timestamp_parse (&self->setting_date_and_time, tag_data, tag_size))
-      goto error;
-
-    GST_DEBUG ("  last modified date = %s",
-        mxf_timestamp_to_string (&self->setting_date_and_time, str));
-  } else if (memcmp (tag_ul, &time_period_keyword_ul, 16) == 0) {
-    self->time_period_keyword = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  time period keyword = %s",
-        GST_STR_NULL (self->time_period_keyword));
-  } else if (memcmp (tag_ul, &setting_period_description_ul, 16) == 0) {
-    self->setting_period_description = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  setting period description = %s",
-        GST_STR_NULL (self->setting_period_description));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_setting_period_parent_class)->handle_tag (metadata, primer,
-        tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 setting period local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_setting_period_init (MXFDMS1SettingPeriod * self)
-{
-}
-
-static void
-mxf_dms1_setting_period_class_init (MXFDMS1SettingPeriodClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_setting_period_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_setting_period_handle_tag;
-  dm_class->type = 0x170200;
-}
-
-G_DEFINE_TYPE (MXFDMS1Scripting, mxf_dms1_scripting, MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_scripting_finalize (GObject * object)
-{
-  MXFDMS1Scripting *self = MXF_DMS1_SCRIPTING (object);
-
-  g_free (self->scripting_kind);
-  self->scripting_kind = NULL;
-
-  g_free (self->scripting_text);
-  self->scripting_text = NULL;
-
-  g_free (self->scripting_locators);
-  self->scripting_locators = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_scripting_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_scripting_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Scripting *self = MXF_DMS1_SCRIPTING (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 scripting_kind_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x02, 0x01, 0x06, 0x0b, 0x01, 0x00, 0x00
-  };
-  static const guint8 scripting_text_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x02, 0x01, 0x06, 0x0c, 0x01, 0x00, 0x00
-  };
-  static const guint8 scripting_locators_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x08, 0x06,
-    0x01, 0x01, 0x04, 0x06, 0x0e, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &scripting_kind_ul, 16) == 0) {
-    self->scripting_kind = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  scripting kind = %s", GST_STR_NULL (self->scripting_kind));
-  } else if (memcmp (tag_ul, &scripting_text_ul, 16) == 0) {
-    self->scripting_text = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  scripting description = %s",
-        GST_STR_NULL (self->scripting_text));
-  } else if (memcmp (tag_ul, &scripting_locators_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->scripting_locators,
-            &self->n_scripting_locators, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of scripting locators = %u",
-        self->n_scripting_locators);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_scripting_locators; i++) {
-        GST_DEBUG ("   scripting locators %u = %s", i,
-            mxf_uuid_to_string (&self->scripting_locators[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_scripting_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 scripting local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_scripting_init (MXFDMS1Scripting * self)
-{
-}
-
-static void
-mxf_dms1_scripting_class_init (MXFDMS1ScriptingClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_scripting_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_scripting_handle_tag;
-  dm_class->type = 0x170300;
-}
-
-G_DEFINE_TYPE (MXFDMS1Classification, mxf_dms1_classification,
-    MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_classification_finalize (GObject * object)
-{
-  MXFDMS1Classification *self = MXF_DMS1_CLASSIFICATION (object);
-
-  g_free (self->name_value_sets_uids);
-  self->name_value_sets_uids = NULL;
-
-  g_free (self->name_value_sets);
-  self->name_value_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_classification_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_classification_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Classification *self = MXF_DMS1_CLASSIFICATION (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->name_value_sets)
-    memset (self->name_value_sets, 0,
-        sizeof (gpointer) * self->n_name_value_sets);
-  else
-    self->name_value_sets =
-        g_new0 (MXFDMS1NameValue *, self->n_name_value_sets);
-
-  for (i = 0; i < self->n_name_value_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->name_value_sets_uids[i]);
-    if (current && MXF_IS_DMS1_NAME_VALUE (current)) {
-      self->name_value_sets[i] = MXF_DMS1_NAME_VALUE (current);
-    }
-  }
-
-  return
-      MXF_METADATA_BASE_CLASS (mxf_dms1_classification_parent_class)->resolve
-      (m, metadata);
-}
-
-static gboolean
-mxf_dms1_classification_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Classification *self = MXF_DMS1_CLASSIFICATION (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 content_classification_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x03,
-    0x02, 0x01, 0x03, 0x04, 0x00, 0x00, 0x00
-  };
-  static const guint8 name_value_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x1f, 0x01
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &content_classification_ul, 16) == 0) {
-    if (tag_size > 127)
-      goto error;
-
-    memcpy (self->content_classification, tag_data, tag_size);
-    GST_DEBUG ("  content classification = %s", self->content_classification);
-  } else if (memcmp (tag_ul, &name_value_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->name_value_sets_uids,
-            &self->n_name_value_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of name-value sets = %u", self->n_name_value_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_name_value_sets; i++) {
-        GST_DEBUG ("    name-value sets %u = %s", i,
-            mxf_uuid_to_string (&self->name_value_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_classification_parent_class)->handle_tag (metadata, primer,
-        tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 classification local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_classification_init (MXFDMS1Classification * self)
-{
-}
-
-static void
-mxf_dms1_classification_class_init (MXFDMS1ClassificationClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_classification_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_classification_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_classification_resolve;
-  dm_class->type = 0x170400;
-}
-
-G_DEFINE_TYPE (MXFDMS1Shot, mxf_dms1_shot, MXF_TYPE_DMS1_TEXT_LANGUAGE);
-
-static void
-mxf_dms1_shot_finalize (GObject * object)
-{
-  MXFDMS1Shot *self = MXF_DMS1_SHOT (object);
-
-  g_free (self->shot_track_ids);
-  self->shot_track_ids = NULL;
-
-  g_free (self->shot_description);
-  self->shot_description = NULL;
-
-  g_free (self->shot_comment_kind);
-  self->shot_comment_kind = NULL;
-
-  g_free (self->shot_comment);
-  self->shot_comment = NULL;
-
-  g_free (self->key_point_sets_uids);
-  self->key_point_sets_uids = NULL;
-
-  g_free (self->key_point_sets);
-  self->key_point_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_shot_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_shot_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Shot *self = MXF_DMS1_SHOT (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->key_point_sets)
-    memset (self->key_point_sets, 0,
-        sizeof (gpointer) * self->n_key_point_sets);
-  else
-    self->key_point_sets = g_new0 (MXFDMS1KeyPoint *, self->n_key_point_sets);
-
-  current = g_hash_table_lookup (metadata, &self->cue_words_set_uid);
-  if (current && MXF_IS_DMS1_CUE_WORDS (current)) {
-    self->cue_words_set = MXF_DMS1_CUE_WORDS (current);
-  }
-
-  for (i = 0; i < self->n_key_point_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->key_point_sets_uids[i]);
-    if (current && MXF_IS_DMS1_KEY_POINT (current)) {
-      self->key_point_sets[i] = MXF_DMS1_KEY_POINT (current);
-    }
-  }
-
-  return MXF_METADATA_BASE_CLASS (mxf_dms1_shot_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_shot_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
-    guint16 tag, const guint8 * tag_data, guint tag_size)
-{
-  MXFDMS1Shot *self = MXF_DMS1_SHOT (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 shot_start_position_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x07,
-    0x02, 0x01, 0x03, 0x01, 0x09, 0x00, 0x00
-  };
-  static const guint8 shot_duration_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x07,
-    0x02, 0x02, 0x01, 0x02, 0x04, 0x00, 0x00
-  };
-  static const guint8 shot_track_ids_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x01,
-    0x07, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 shot_description_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x02, 0x01, 0x06, 0x0d, 0x01, 0x00, 0x00
-  };
-  static const guint8 shot_comment_kind_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x03,
-    0x02, 0x05, 0x01, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 shot_comment_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x03,
-    0x02, 0x05, 0x02, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 cue_words_set_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x02, 0x40, 0x23, 0x01
-  };
-  static const guint8 key_point_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x12, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &shot_start_position_ul, 16) == 0) {
-    if (tag_size != 8)
-      goto error;
-
-    self->shot_start_position = GST_READ_UINT64_BE (tag_data);
-    GST_DEBUG ("  shot start position = %" G_GINT64_FORMAT,
-        self->shot_start_position);
-  } else if (memcmp (tag_ul, &shot_duration_ul, 16) == 0) {
-    if (tag_size != 8)
-      goto error;
-
-    self->shot_duration = GST_READ_UINT64_BE (tag_data);
-    GST_DEBUG ("  shot duration = %" G_GINT64_FORMAT, self->shot_duration);
-  } else if (memcmp (tag_ul, &shot_track_ids_ul, 16) == 0) {
-    guint32 len, i;
-
-    len = GST_READ_UINT32_BE (tag_data);
-    GST_DEBUG ("  number of shot track ids = %u", len);
-    if (len == 0)
-      return ret;
-
-    if (GST_READ_UINT32_BE (tag_data + 4) != 4)
-      goto error;
-    tag_data += 8;
-    tag_size -= 8;
-
-    if (tag_size < 4 * len)
-      goto error;
-
-    self->n_shot_track_ids = len;
-    self->shot_track_ids = g_new0 (guint32, len);
-
-    for (i = 0; i < len; i++) {
-      self->shot_track_ids[i] = GST_READ_UINT32_BE (tag_data);
-      GST_DEBUG ("    shot track ids %u = %u", i, self->shot_track_ids[i]);
-      tag_data += 4;
-      tag_size -= 4;
-    }
-  } else if (memcmp (tag_ul, &shot_description_ul, 16) == 0) {
-    self->shot_description = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  shot description = %s",
-        GST_STR_NULL (self->shot_description));
-  } else if (memcmp (tag_ul, &shot_comment_kind_ul, 16) == 0) {
-    self->shot_comment_kind = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  shot comment kind = %s",
-        GST_STR_NULL (self->shot_comment_kind));
-  } else if (memcmp (tag_ul, &shot_comment_ul, 16) == 0) {
-    self->shot_comment = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  shot comment = %s", GST_STR_NULL (self->shot_comment));
-  } else if (memcmp (tag_ul, &cue_words_set_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-
-    memcpy (&self->cue_words_set_uid, tag_data, 16);
-    GST_DEBUG ("  cue words set = %s",
-        mxf_uuid_to_string (&self->cue_words_set_uid, str));
-  } else if (memcmp (tag_ul, &key_point_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->key_point_sets_uids,
-            &self->n_key_point_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of key point sets = %u", self->n_key_point_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_key_point_sets; i++) {
-        GST_DEBUG ("    key point sets %u = %s", i,
-            mxf_uuid_to_string (&self->key_point_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_shot_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 shot local tag 0x%04x of size %u", tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_shot_init (MXFDMS1Shot * self)
-{
-}
-
-static void
-mxf_dms1_shot_class_init (MXFDMS1ShotClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_shot_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_shot_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_shot_resolve;
-  dm_class->type = 0x170500;
-}
-
-G_DEFINE_TYPE (MXFDMS1KeyPoint, mxf_dms1_key_point, MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_key_point_finalize (GObject * object)
-{
-  MXFDMS1KeyPoint *self = MXF_DMS1_KEY_POINT (object);
-
-  g_free (self->keypoint_kind);
-  self->keypoint_kind = NULL;
-
-  g_free (self->keypoint_value);
-  self->keypoint_value = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_key_point_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_key_point_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1KeyPoint *self = MXF_DMS1_KEY_POINT (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 keypoint_kind_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x03,
-    0x02, 0x01, 0x02, 0x10, 0x01, 0x00, 0x00
-  };
-  static const guint8 keypoint_value_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x03,
-    0x02, 0x01, 0x02, 0x11, 0x01, 0x00, 0x00
-  };
-  static const guint8 keypoint_position_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x07,
-    0x02, 0x01, 0x03, 0x01, 0x07, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &keypoint_kind_ul, 16) == 0) {
-    self->keypoint_kind = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  keypoint kind = %s", GST_STR_NULL (self->keypoint_kind));
-  } else if (memcmp (tag_ul, &keypoint_value_ul, 16) == 0) {
-    self->keypoint_value = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  keypoint value = %s", GST_STR_NULL (self->keypoint_value));
-  } else if (memcmp (tag_ul, &keypoint_position_ul, 16) == 0) {
-    if (tag_size != 8)
-      goto error;
-
-    self->keypoint_position = GST_READ_UINT64_BE (tag_data);
-    GST_DEBUG ("  keypoint position = %" G_GINT64_FORMAT,
-        self->keypoint_position);
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_key_point_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 key point local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_key_point_init (MXFDMS1KeyPoint * self)
-{
-}
-
-static void
-mxf_dms1_key_point_class_init (MXFDMS1KeyPointClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_key_point_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_key_point_handle_tag;
-  dm_class->type = 0x170600;
-}
-
-G_DEFINE_TYPE (MXFDMS1Participant, mxf_dms1_participant,
-    MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_participant_finalize (GObject * object)
-{
-  MXFDMS1Participant *self = MXF_DMS1_PARTICIPANT (object);
-
-  g_free (self->contribution_status);
-  self->contribution_status = NULL;
-
-  g_free (self->job_function);
-  self->job_function = NULL;
-
-  g_free (self->role_or_identity_name);
-  self->role_or_identity_name = NULL;
-
-  g_free (self->person_sets_uids);
-  self->person_sets_uids = NULL;
-
-  g_free (self->person_sets);
-  self->person_sets = NULL;
-
-  g_free (self->organisation_sets_uids);
-  self->organisation_sets_uids = NULL;
-
-  g_free (self->organisation_sets);
-  self->organisation_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_participant_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_participant_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Participant *self = MXF_DMS1_PARTICIPANT (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->person_sets)
-    memset (self->person_sets, 0, sizeof (gpointer) * self->n_person_sets);
-  else
-    self->person_sets = g_new0 (MXFDMS1Person *, self->n_person_sets);
-
-  if (self->organisation_sets)
-    memset (self->organisation_sets, 0,
-        sizeof (gpointer) * self->n_organisation_sets);
-  else
-    self->organisation_sets =
-        g_new0 (MXFDMS1Organisation *, self->n_organisation_sets);
-
-  for (i = 0; i < self->n_person_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->person_sets_uids[i]);
-    if (current && MXF_IS_DMS1_PERSON (current)) {
-      self->person_sets[i] = MXF_DMS1_PERSON (current);
-    }
-  }
-
-  for (i = 0; i < self->n_organisation_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->organisation_sets_uids[i]);
-    if (current && MXF_IS_DMS1_ORGANISATION (current)) {
-      self->organisation_sets[i] = MXF_DMS1_ORGANISATION (current);
-    }
-  }
-
-  return
-      MXF_METADATA_BASE_CLASS (mxf_dms1_participant_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_participant_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Participant *self = MXF_DMS1_PARTICIPANT (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 participant_uid_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x08, 0x01,
-    0x01, 0x15, 0x40, 0x01, 0x01, 0x00, 0x00
-  };
-  static const guint8 contribution_status_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x30, 0x01, 0x02, 0x01, 0x01, 0x00, 0x00
-  };
-  static const guint8 job_function_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x30, 0x05, 0x01, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 job_function_code_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x30, 0x05, 0x01, 0x02, 0x00, 0x00, 0x00
-  };
-  static const guint8 role_or_identity_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x30, 0x05, 0x02, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 person_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x03, 0x40, 0x14, 0x00
-  };
-  static const guint8 organisation_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x03, 0x40, 0x15, 0x02
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &participant_uid_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-
-    memcpy (&self->participant_uid, tag_data, 16);
-    GST_DEBUG ("  participant uid = %s",
-        mxf_uuid_to_string (&self->participant_uid, str));
-  } else if (memcmp (tag_ul, &contribution_status_ul, 16) == 0) {
-    self->contribution_status = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  contribution status = %s",
-        GST_STR_NULL (self->contribution_status));
-  } else if (memcmp (tag_ul, &job_function_ul, 16) == 0) {
-    self->job_function = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  job function = %s", GST_STR_NULL (self->job_function));
-  } else if (memcmp (tag_ul, &job_function_code_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->job_function_code, tag_data, tag_size);
-    GST_DEBUG ("  job function code = %s", self->job_function_code);
-  } else if (memcmp (tag_ul, &role_or_identity_name_ul, 16) == 0) {
-    self->role_or_identity_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  role or identity name = %s",
-        GST_STR_NULL (self->role_or_identity_name));
-  } else if (memcmp (tag_ul, &person_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->person_sets_uids, &self->n_person_sets,
-            tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of person sets = %u", self->n_person_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_person_sets; i++) {
-        GST_DEBUG ("    person sets %u = %s", i,
-            mxf_uuid_to_string (&self->person_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &organisation_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->organisation_sets_uids,
-            &self->n_organisation_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of organisation sets = %u", self->n_organisation_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_organisation_sets; i++) {
-        GST_DEBUG ("    organisation sets %u = %s", i,
-            mxf_uuid_to_string (&self->organisation_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_participant_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 participant local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_participant_init (MXFDMS1Participant * self)
-{
-}
-
-static void
-mxf_dms1_participant_class_init (MXFDMS1ParticipantClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_participant_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_participant_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_participant_resolve;
-  dm_class->type = 0x180100;
-}
-
-G_DEFINE_ABSTRACT_TYPE (MXFDMS1Contact, mxf_dms1_contact,
-    MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_contact_finalize (GObject * object)
-{
-  MXFDMS1Contact *self = MXF_DMS1_CONTACT (object);
-
-  g_free (self->name_value_sets_uids);
-  self->name_value_sets_uids = NULL;
-
-  g_free (self->name_value_sets);
-  self->name_value_sets = NULL;
-
-  g_free (self->address_sets_uids);
-  self->address_sets_uids = NULL;
-
-  g_free (self->address_sets);
-  self->address_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_contact_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_contact_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Contact *self = MXF_DMS1_CONTACT (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->name_value_sets)
-    memset (self->name_value_sets, 0,
-        sizeof (gpointer) * self->n_name_value_sets);
-  else
-    self->name_value_sets =
-        g_new0 (MXFDMS1NameValue *, self->n_name_value_sets);
-
-  if (self->address_sets)
-    memset (self->address_sets, 0, sizeof (gpointer) * self->n_address_sets);
-  else
-    self->address_sets = g_new0 (MXFDMS1Address *, self->n_address_sets);
-
-  for (i = 0; i < self->n_name_value_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->name_value_sets_uids[i]);
-    if (current && MXF_IS_DMS1_NAME_VALUE (current)) {
-      self->name_value_sets[i] = MXF_DMS1_NAME_VALUE (current);
-    }
-  }
-
-  for (i = 0; i < self->n_address_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->address_sets_uids[i]);
-    if (current && MXF_IS_DMS1_ADDRESS (current)) {
-      self->address_sets[i] = MXF_DMS1_ADDRESS (current);
-    }
-  }
-
-  return MXF_METADATA_BASE_CLASS (mxf_dms1_contact_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_contact_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
-    guint16 tag, const guint8 * tag_data, guint tag_size)
-{
-  MXFDMS1Contact *self = MXF_DMS1_CONTACT (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 contact_uid_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x08, 0x01,
-    0x01, 0x15, 0x40, 0x01, 0x02, 0x00, 0x00
-  };
-  static const guint8 name_value_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x1f, 0x02
-  };
-  static const guint8 address_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x17, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &contact_uid_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-
-    memcpy (&self->contact_uid, tag_data, 16);
-    GST_DEBUG ("  contact uid = %s", mxf_uuid_to_string (&self->contact_uid,
-            str));
-  } else if (memcmp (tag_ul, &name_value_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->name_value_sets_uids,
-            &self->n_name_value_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of name-value sets = %u", self->n_name_value_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_name_value_sets; i++) {
-        GST_DEBUG ("    name-value sets %u = %s", i,
-            mxf_uuid_to_string (&self->name_value_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &address_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->address_sets_uids, &self->n_address_sets,
-            tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of address sets = %u", self->n_address_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_address_sets; i++) {
-        GST_DEBUG ("    address sets %u = %s", i,
-            mxf_uuid_to_string (&self->address_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_contact_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 contact local tag 0x%04x of size %u", tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_contact_init (MXFDMS1Contact * self)
-{
-}
-
-static void
-mxf_dms1_contact_class_init (MXFDMS1ContactClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-
-  object_class->finalize = mxf_dms1_contact_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_contact_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_contact_resolve;
-}
-
-G_DEFINE_TYPE (MXFDMS1Person, mxf_dms1_person, MXF_TYPE_DMS1_CONTACT);
-
-static void
-mxf_dms1_person_finalize (GObject * object)
-{
-  MXFDMS1Person *self = MXF_DMS1_PERSON (object);
-
-  g_free (self->family_name);
-  self->family_name = NULL;
-
-  g_free (self->first_given_name);
-  self->first_given_name = NULL;
-
-  g_free (self->other_given_names);
-  self->other_given_names = NULL;
-
-  g_free (self->linking_name);
-  self->linking_name = NULL;
-
-  g_free (self->salutation);
-  self->salutation = NULL;
-
-  g_free (self->name_suffix);
-  self->name_suffix = NULL;
-
-  g_free (self->honours_qualifications);
-  self->honours_qualifications = NULL;
-
-  g_free (self->former_family_name);
-  self->former_family_name = NULL;
-
-  g_free (self->person_description);
-  self->person_description = NULL;
-
-  g_free (self->alternate_name);
-  self->alternate_name = NULL;
-
-  g_free (self->nationality);
-  self->nationality = NULL;
-
-  g_free (self->citizenship);
-  self->citizenship = NULL;
-
-  g_free (self->organisation_sets_uids);
-  self->organisation_sets_uids = NULL;
-
-  g_free (self->organisation_sets);
-  self->organisation_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_person_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_person_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Person *self = MXF_DMS1_PERSON (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->organisation_sets)
-    memset (self->organisation_sets, 0,
-        sizeof (gpointer) * self->n_organisation_sets);
-  else
-    self->organisation_sets =
-        g_new0 (MXFDMS1Organisation *, self->n_organisation_sets);
-
-  for (i = 0; i < self->n_organisation_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->organisation_sets_uids[i]);
-    if (current && MXF_IS_DMS1_ORGANISATION (current)) {
-      self->organisation_sets[i] = MXF_DMS1_ORGANISATION (current);
-    }
-  }
-
-  return MXF_METADATA_BASE_CLASS (mxf_dms1_person_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_person_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
-    guint16 tag, const guint8 * tag_data, guint tag_size)
-{
-  MXFDMS1Person *self = MXF_DMS1_PERSON (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 family_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x01, 0x01, 0x00
-  };
-  static const guint8 first_given_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x02, 0x01, 0x00
-  };
-  static const guint8 other_given_names_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x08, 0x01, 0x00
-  };
-  static const guint8 linking_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x0a, 0x01, 0x00
-  };
-  static const guint8 salutation_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x05, 0x01, 0x00
-  };
-  static const guint8 name_suffix_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x0b, 0x01, 0x00
-  };
-  static const guint8 honours_qualifications_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x06, 0x01, 0x00
-  };
-  static const guint8 former_family_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x0c, 0x01, 0x00
-  };
-  static const guint8 person_description_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x07, 0x01, 0x00
-  };
-  static const guint8 alternate_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x09, 0x01, 0x00
-  };
-  static const guint8 nationality_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x0d, 0x01, 0x00
-  };
-  static const guint8 citizenship_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x02,
-    0x30, 0x06, 0x03, 0x01, 0x0e, 0x01, 0x00
-  };
-  static const guint8 organisation_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x03, 0x40, 0x15, 0x02
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &family_name_ul, 16) == 0) {
-    self->family_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  family name = %s", GST_STR_NULL (self->family_name));
-  } else if (memcmp (tag_ul, &first_given_name_ul, 16) == 0) {
-    self->first_given_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  first given name = %s",
-        GST_STR_NULL (self->first_given_name));
-  } else if (memcmp (tag_ul, &other_given_names_ul, 16) == 0) {
-    self->other_given_names = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  other given names = %s",
-        GST_STR_NULL (self->other_given_names));
-  } else if (memcmp (tag_ul, &linking_name_ul, 16) == 0) {
-    self->linking_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  linking name = %s", GST_STR_NULL (self->linking_name));
-  } else if (memcmp (tag_ul, &salutation_ul, 16) == 0) {
-    self->salutation = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  salutation = %s", GST_STR_NULL (self->salutation));
-  } else if (memcmp (tag_ul, &name_suffix_ul, 16) == 0) {
-    self->name_suffix = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  name suffix = %s", GST_STR_NULL (self->name_suffix));
-  } else if (memcmp (tag_ul, &honours_qualifications_ul, 16) == 0) {
-    self->honours_qualifications = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  honours & qualifications = %s",
-        GST_STR_NULL (self->honours_qualifications));
-  } else if (memcmp (tag_ul, &former_family_name_ul, 16) == 0) {
-    self->former_family_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  former family name = %s",
-        GST_STR_NULL (self->former_family_name));
-  } else if (memcmp (tag_ul, &person_description_ul, 16) == 0) {
-    self->person_description = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  person description = %s",
-        GST_STR_NULL (self->person_description));
-  } else if (memcmp (tag_ul, &alternate_name_ul, 16) == 0) {
-    self->alternate_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  alternate name = %s", GST_STR_NULL (self->alternate_name));
-  } else if (memcmp (tag_ul, &nationality_ul, 16) == 0) {
-    self->nationality = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  nationality = %s", GST_STR_NULL (self->nationality));
-  } else if (memcmp (tag_ul, &citizenship_ul, 16) == 0) {
-    self->citizenship = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  citizenship = %s", GST_STR_NULL (self->citizenship));
-  } else if (memcmp (tag_ul, &organisation_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->organisation_sets_uids,
-            &self->n_organisation_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of organisation sets = %u", self->n_organisation_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_organisation_sets; i++) {
-        GST_DEBUG ("    organisation sets %u = %s", i,
-            mxf_uuid_to_string (&self->organisation_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_person_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 person local tag 0x%04x of size %u", tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_person_init (MXFDMS1Person * self)
-{
-}
-
-static void
-mxf_dms1_person_class_init (MXFDMS1PersonClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_person_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_person_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_person_resolve;
-  dm_class->type = 0x1a0200;
-}
-
-G_DEFINE_TYPE (MXFDMS1Organisation, mxf_dms1_organisation,
-    MXF_TYPE_DMS1_CONTACT);
-
-static void
-mxf_dms1_organisation_finalize (GObject * object)
-{
-  MXFDMS1Organisation *self = MXF_DMS1_ORGANISATION (object);
-
-  g_free (self->nature_of_organisation);
-  self->nature_of_organisation = NULL;
-
-  g_free (self->organisation_main_name);
-  self->organisation_main_name = NULL;
-
-  g_free (self->organisation_code);
-  self->organisation_code = NULL;
-
-  g_free (self->contact_department);
-  self->contact_department = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_organisation_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_organisation_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Organisation *self = MXF_DMS1_ORGANISATION (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 nature_of_organisation_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x30, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 organisation_main_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x30, 0x06, 0x03, 0x03, 0x01, 0x01, 0x00
-  };
-  static const guint8 organisation_code_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x01,
-    0x0a, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 contact_department_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x30, 0x06, 0x02, 0x01, 0x00, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &nature_of_organisation_ul, 16) == 0) {
-    self->nature_of_organisation = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  nature of organisation = %s",
-        GST_STR_NULL (self->nature_of_organisation));
-  } else if (memcmp (tag_ul, &organisation_main_name_ul, 16) == 0) {
-    self->organisation_main_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  organisation main name = %s",
-        GST_STR_NULL (self->organisation_main_name));
-  } else if (memcmp (tag_ul, &organisation_code_ul, 16) == 0) {
-    self->organisation_code = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  organisation code = %s",
-        GST_STR_NULL (self->organisation_code));
-  } else if (memcmp (tag_ul, &contact_department_ul, 16) == 0) {
-    self->contact_department = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  contact department = %s",
-        GST_STR_NULL (self->contact_department));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_organisation_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-}
-
-static void
-mxf_dms1_organisation_init (MXFDMS1Organisation * self)
-{
-}
-
-static void
-mxf_dms1_organisation_class_init (MXFDMS1OrganisationClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_organisation_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_organisation_handle_tag;
-  dm_class->type = 0x1a0300;
-}
-
-G_DEFINE_TYPE (MXFDMS1Location, mxf_dms1_location, MXF_TYPE_DMS1_CONTACT);
-
-static void
-mxf_dms1_location_finalize (GObject * object)
-{
-  MXFDMS1Location *self = MXF_DMS1_LOCATION (object);
-
-  g_free (self->location_kind);
-  self->location_kind = NULL;
-
-  g_free (self->location_description);
-  self->location_description = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_location_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_location_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Location *self = MXF_DMS1_LOCATION (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 location_kind_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x07,
-    0x01, 0x20, 0x02, 0x03, 0x01, 0x00, 0x00
-  };
-  static const guint8 location_description_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x07,
-    0x01, 0x20, 0x02, 0x02, 0x01, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &location_kind_ul, 16) == 0) {
-    self->location_kind = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  location kind = %s", GST_STR_NULL (self->location_kind));
-  } else if (memcmp (tag_ul, &location_description_ul, 16) == 0) {
-    self->location_description = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  location description = %s",
-        GST_STR_NULL (self->location_description));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_location_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-}
-
-static void
-mxf_dms1_location_init (MXFDMS1Location * self)
-{
-}
-
-static void
-mxf_dms1_location_class_init (MXFDMS1LocationClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_location_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_location_handle_tag;
-  dm_class->type = 0x1a0400;
-}
-
-G_DEFINE_TYPE (MXFDMS1Address, mxf_dms1_address, MXF_TYPE_DMS1);
-
-static void
-mxf_dms1_address_finalize (GObject * object)
-{
-  MXFDMS1Address *self = MXF_DMS1_ADDRESS (object);
-
-  g_free (self->room_or_suite_number);
-  self->room_or_suite_number = NULL;
-
-  g_free (self->room_or_suite_name);
-  self->room_or_suite_name = NULL;
-
-  g_free (self->building_name);
-  self->building_name = NULL;
-
-  g_free (self->street_number);
-  self->street_number = NULL;
-
-  g_free (self->street_name);
-  self->street_name = NULL;
-
-  g_free (self->postal_town);
-  self->postal_town = NULL;
-
-  g_free (self->city);
-  self->city = NULL;
-
-  g_free (self->state_or_province_or_country);
-  self->state_or_province_or_country = NULL;
-
-  g_free (self->postal_code);
-  self->postal_code = NULL;
-
-  g_free (self->country);
-  self->country = NULL;
-
-  g_free (self->astronomical_body_name);
-  self->astronomical_body_name = NULL;
-
-  g_free (self->communications_sets_uids);
-  self->communications_sets_uids = NULL;
-
-  g_free (self->communications_sets);
-  self->communications_sets = NULL;
-
-  g_free (self->name_value_sets_uids);
-  self->name_value_sets_uids = NULL;
-
-  g_free (self->name_value_sets);
-  self->name_value_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_address_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_address_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Address *self = MXF_DMS1_ADDRESS (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->communications_sets)
-    memset (self->communications_sets, 0,
-        sizeof (gpointer) * self->n_communications_sets);
-  else
-    self->communications_sets =
-        g_new0 (MXFDMS1Communications *, self->n_communications_sets);
-
-  if (self->name_value_sets)
-    memset (self->name_value_sets, 0,
-        sizeof (gpointer) * self->n_name_value_sets);
-  else
-    self->name_value_sets =
-        g_new0 (MXFDMS1NameValue *, self->n_name_value_sets);
-
-  for (i = 0; i < self->n_communications_sets; i++) {
-    current =
-        g_hash_table_lookup (metadata, &self->communications_sets_uids[i]);
-    if (current && MXF_IS_DMS1_COMMUNICATIONS (current)) {
-      self->communications_sets[i] = MXF_DMS1_COMMUNICATIONS (current);
-    }
-  }
-
-  for (i = 0; i < self->n_name_value_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->name_value_sets_uids[i]);
-    if (current && MXF_IS_DMS1_NAME_VALUE (current)) {
-      self->name_value_sets[i] = MXF_DMS1_NAME_VALUE (current);
-    }
-  }
-
-  return MXF_METADATA_BASE_CLASS (mxf_dms1_address_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_address_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
-    guint16 tag, const guint8 * tag_data, guint tag_size)
-{
-  MXFDMS1Address *self = MXF_DMS1_ADDRESS (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 room_or_suite_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x01, 0x01
-  };
-  static const guint8 room_or_suite_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x11, 0x01
-  };
-  static const guint8 building_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x12, 0x01
-  };
-  static const guint8 place_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x14, 0x01
-  };
-  static const guint8 street_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x02, 0x01
-  };
-  static const guint8 street_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x03, 0x01
-  };
-  static const guint8 postal_town_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x04, 0x01
-  };
-  static const guint8 city_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x05, 0x01
-  };
-  static const guint8 state_or_province_or_country_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x06, 0x01
-  };
-  static const guint8 postal_code_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x07, 0x01
-  };
-  static const guint8 country_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x08, 0x01
-  };
-  static const guint8 geographical_coordinate_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x15, 0x01
-  };
-  static const guint8 astronomical_body_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x07,
-    0x01, 0x20, 0x01, 0x04, 0x01, 0x16, 0x01
-  };
-  static const guint8 communications_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x19, 0x00
-  };
-  static const guint8 name_value_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x07, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x1f, 0x04
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &room_or_suite_name_ul, 16) == 0) {
-    self->room_or_suite_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  room or suite name = %s",
-        GST_STR_NULL (self->room_or_suite_name));
-  } else if (memcmp (tag_ul, &room_or_suite_number_ul, 16) == 0) {
-    self->room_or_suite_number = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  room or suite number = %s",
-        GST_STR_NULL (self->room_or_suite_number));
-  } else if (memcmp (tag_ul, &building_name_ul, 16) == 0) {
-    self->building_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  building name = %s", GST_STR_NULL (self->building_name));
-  } else if (memcmp (tag_ul, &place_name_ul, 16) == 0) {
-    self->place_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  place name = %s", GST_STR_NULL (self->place_name));
-  } else if (memcmp (tag_ul, &street_number_ul, 16) == 0) {
-    self->street_number = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  street number = %s", GST_STR_NULL (self->street_number));
-  } else if (memcmp (tag_ul, &street_name_ul, 16) == 0) {
-    self->street_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  street name = %s", GST_STR_NULL (self->street_name));
-  } else if (memcmp (tag_ul, &postal_town_ul, 16) == 0) {
-    self->postal_town = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  postal town = %s", GST_STR_NULL (self->postal_town));
-  } else if (memcmp (tag_ul, &city_ul, 16) == 0) {
-    self->city = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  city = %s", GST_STR_NULL (self->city));
-  } else if (memcmp (tag_ul, &state_or_province_or_country_ul, 16) == 0) {
-    self->state_or_province_or_country = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  state or province or country = %s",
-        GST_STR_NULL (self->state_or_province_or_country));
-  } else if (memcmp (tag_ul, &postal_code_ul, 16) == 0) {
-    self->postal_code = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  postal code = %s", GST_STR_NULL (self->postal_code));
-  } else if (memcmp (tag_ul, &country_ul, 16) == 0) {
-    self->country = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  country = %s", GST_STR_NULL (self->country));
-  } else if (memcmp (tag_ul, &geographical_coordinate_ul, 16) == 0) {
-    if (tag_size != 12)
-      goto error;
-
-    memcpy (&self->geographical_coordinate, tag_data, 12);
-    /* TODO implement */
-  } else if (memcmp (tag_ul, &astronomical_body_name_ul, 16) == 0) {
-    self->astronomical_body_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  astronomical body name = %s",
-        GST_STR_NULL (self->astronomical_body_name));
-  } else if (memcmp (tag_ul, &communications_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->communications_sets_uids,
-            &self->n_communications_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of communications sets = %u",
-        self->n_communications_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_communications_sets; i++) {
-        GST_DEBUG ("    communications sets %u = %s", i,
-            mxf_uuid_to_string (&self->communications_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &name_value_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->name_value_sets_uids,
-            &self->n_name_value_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of name-value sets = %u", self->n_name_value_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_name_value_sets; i++) {
-        GST_DEBUG ("    name-value sets %u = %s", i,
-            mxf_uuid_to_string (&self->name_value_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_address_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 address local tag 0x%04x of size %u", tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_address_init (MXFDMS1Address * self)
-{
-}
-
-static void
-mxf_dms1_address_class_init (MXFDMS1AddressClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_address_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_address_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_address_resolve;
-  dm_class->type = 0x1b0100;
-}
-
-G_DEFINE_TYPE (MXFDMS1Communications, mxf_dms1_communications, MXF_TYPE_DMS1);
-
-static void
-mxf_dms1_communications_finalize (GObject * object)
-{
-  MXFDMS1Communications *self = MXF_DMS1_COMMUNICATIONS (object);
-
-  g_free (self->email_address);
-  self->email_address = NULL;
-
-  g_free (self->web_page);
-  self->web_page = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_communications_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_communications_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Communications *self = MXF_DMS1_COMMUNICATIONS (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 central_telephone_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x07,
-    0x01, 0x20, 0x01, 0x10, 0x03, 0x04, 0x00
-  };
-  static const guint8 telephone_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x07,
-    0x01, 0x20, 0x01, 0x10, 0x03, 0x01, 0x00
-  };
-  static const guint8 mobile_telephone_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x07,
-    0x01, 0x20, 0x01, 0x10, 0x03, 0x05, 0x00
-  };
-  static const guint8 fax_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x07,
-    0x01, 0x20, 0x01, 0x10, 0x03, 0x02, 0x00
-  };
-  static const guint8 email_address_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x07,
-    0x01, 0x20, 0x01, 0x10, 0x03, 0x03, 0x01
-  };
-  static const guint8 web_page_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x07,
-    0x01, 0x20, 0x01, 0x10, 0x03, 0x06, 0x01
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &central_telephone_number_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-    memcpy (self->central_telephone_number, tag_data, tag_size);
-
-    GST_DEBUG ("  central telephone number = %s",
-        self->central_telephone_number);
-  } else if (memcmp (tag_ul, &telephone_number_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-    memcpy (self->telephone_number, tag_data, tag_size);
-
-    GST_DEBUG ("  telephone number = %s", self->telephone_number);
-  } else if (memcmp (tag_ul, &mobile_telephone_number_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-    memcpy (self->mobile_telephone_number, tag_data, tag_size);
-
-    GST_DEBUG ("  mobile telephone number = %s", self->mobile_telephone_number);
-  } else if (memcmp (tag_ul, &fax_number_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-    memcpy (self->fax_number, tag_data, tag_size);
-
-    GST_DEBUG ("  fax number = %s", self->fax_number);
-  } else if (memcmp (tag_ul, &email_address_ul, 16) == 0) {
-    self->email_address = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  email address = %s", GST_STR_NULL (self->email_address));
-  } else if (memcmp (tag_ul, &web_page_ul, 16) == 0) {
-    self->web_page = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  web page = %s", GST_STR_NULL (self->web_page));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_communications_parent_class)->handle_tag (metadata, primer,
-        tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 communications local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_communications_init (MXFDMS1Communications * self)
-{
-}
-
-static void
-mxf_dms1_communications_class_init (MXFDMS1CommunicationsClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_communications_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_communications_handle_tag;
-  dm_class->type = 0x1b0200;
-}
-
-G_DEFINE_TYPE (MXFDMS1Contract, mxf_dms1_contract, MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_contract_finalize (GObject * object)
-{
-  MXFDMS1Contract *self = MXF_DMS1_CONTRACT (object);
-
-  g_free (self->rights_sets_uids);
-  self->rights_sets_uids = NULL;
-
-  g_free (self->rights_sets);
-  self->rights_sets = NULL;
-
-  g_free (self->participant_sets_uids);
-  self->participant_sets_uids = NULL;
-
-  g_free (self->participant_sets);
-  self->participant_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_contract_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_contract_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1Contract *self = MXF_DMS1_CONTRACT (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->rights_sets)
-    memset (self->rights_sets, 0, sizeof (gpointer) * self->n_rights_sets);
-  else
-    self->rights_sets = g_new0 (MXFDMS1Rights *, self->n_rights_sets);
-
-  if (self->participant_sets)
-    memset (self->participant_sets, 0,
-        sizeof (gpointer) * self->n_participant_sets);
-  else
-    self->participant_sets =
-        g_new0 (MXFDMS1Participant *, self->n_participant_sets);
-
-  for (i = 0; i < self->n_rights_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->rights_sets_uids[i]);
-    if (current && MXF_IS_DMS1_RIGHTS (current)) {
-      self->rights_sets[i] = MXF_DMS1_RIGHTS (current);
-    }
-  }
-
-  for (i = 0; i < self->n_participant_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->participant_sets_uids[i]);
-    if (current && MXF_IS_DMS1_PARTICIPANT (current)) {
-      self->participant_sets[i] = MXF_DMS1_PARTICIPANT (current);
-    }
-  }
-
-  return MXF_METADATA_BASE_CLASS (mxf_dms1_contract_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_contract_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Contract *self = MXF_DMS1_CONTRACT (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 supply_contract_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x02,
-    0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 rights_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x1a, 0x00
-  };
-  static const guint8 participant_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x03, 0x40, 0x13, 0x02
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &supply_contract_number_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->supply_contract_number, tag_data, tag_size);
-    GST_DEBUG ("  supply contract number = %s", self->supply_contract_number);
-  } else if (memcmp (tag_ul, &rights_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->rights_sets_uids, &self->n_rights_sets,
-            tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of rights sets = %u", self->n_rights_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_rights_sets; i++) {
-        GST_DEBUG ("    rights sets %u = %s", i,
-            mxf_uuid_to_string (&self->rights_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &participant_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->participant_sets_uids,
-            &self->n_participant_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of participant sets = %u", self->n_participant_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_participant_sets; i++) {
-        GST_DEBUG ("    participant sets %u = %s", i,
-            mxf_uuid_to_string (&self->participant_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_contract_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 contract local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_contract_init (MXFDMS1Contract * self)
-{
-}
-
-static void
-mxf_dms1_contract_class_init (MXFDMS1ContractClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_contract_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_contract_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_contract_resolve;
-  dm_class->type = 0x1c0100;
-}
-
-G_DEFINE_TYPE (MXFDMS1Rights, mxf_dms1_rights, MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_rights_finalize (GObject * object)
-{
-  MXFDMS1Rights *self = MXF_DMS1_RIGHTS (object);
-
-  g_free (self->copyright_owner);
-  self->copyright_owner = NULL;
-
-  g_free (self->rights_holder);
-  self->rights_holder = NULL;
-
-  g_free (self->rights_managment_authority);
-  self->rights_managment_authority = NULL;
-
-  g_free (self->region_or_area_of_ip_license);
-  self->region_or_area_of_ip_license = NULL;
-
-  g_free (self->intellectual_property_type);
-  self->intellectual_property_type = NULL;
-
-  g_free (self->right_condition);
-  self->right_condition = NULL;
-
-  g_free (self->right_remarks);
-  self->right_remarks = NULL;
-
-  g_free (self->intellectual_property_right);
-  self->intellectual_property_right = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_rights_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_rights_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
-    guint16 tag, const guint8 * tag_data, guint tag_size)
-{
-  MXFDMS1Rights *self = MXF_DMS1_RIGHTS (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[32];
-#endif
-  static const guint8 copyright_owner_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x05, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 rights_holder_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x05, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 rights_managment_authority_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x05, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 region_or_area_of_ip_license_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x07,
-    0x01, 0x20, 0x01, 0x03, 0x05, 0x01, 0x00
-  };
-  static const guint8 intellectual_property_type_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x05, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 right_condition_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x05, 0x04, 0x03, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 right_remarks_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x08, 0x02,
-    0x05, 0x04, 0x04, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 intellectual_property_right_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x02,
-    0x05, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 rights_start_date_and_time_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x07,
-    0x02, 0x01, 0x20, 0x02, 0x00, 0x00, 0x00
-  };
-  static const guint8 rights_stop_date_and_time_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x07,
-    0x02, 0x01, 0x20, 0x03, 0x00, 0x00, 0x00
-  };
-  static const guint8 maximum_number_of_usages_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x02,
-    0x05, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &copyright_owner_ul, 16) == 0) {
-    self->copyright_owner = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  copyright owner = %s", GST_STR_NULL (self->copyright_owner));
-  } else if (memcmp (tag_ul, &rights_holder_ul, 16) == 0) {
-    self->rights_holder = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  rights holder = %s", GST_STR_NULL (self->rights_holder));
-  } else if (memcmp (tag_ul, &rights_managment_authority_ul, 16) == 0) {
-    self->rights_managment_authority = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  rights managment authority = %s",
-        GST_STR_NULL (self->rights_managment_authority));
-  } else if (memcmp (tag_ul, &region_or_area_of_ip_license_ul, 16) == 0) {
-    self->region_or_area_of_ip_license = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  region or area of ip license = %s",
-        GST_STR_NULL (self->region_or_area_of_ip_license));
-  } else if (memcmp (tag_ul, &intellectual_property_type_ul, 16) == 0) {
-    self->intellectual_property_type = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  intellectual property type = %s",
-        GST_STR_NULL (self->intellectual_property_type));
-  } else if (memcmp (tag_ul, &right_condition_ul, 16) == 0) {
-    self->right_condition = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  right condition = %s", GST_STR_NULL (self->right_condition));
-  } else if (memcmp (tag_ul, &right_remarks_ul, 16) == 0) {
-    self->right_remarks = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  right remarks = %s", GST_STR_NULL (self->right_remarks));
-  } else if (memcmp (tag_ul, &intellectual_property_right_ul, 16) == 0) {
-    self->intellectual_property_right = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  intellectual property right = %s",
-        GST_STR_NULL (self->intellectual_property_right));
-  } else if (memcmp (tag_ul, &rights_start_date_and_time_ul, 16) == 0) {
-    if (!mxf_timestamp_parse (&self->rights_start_date_and_time, tag_data,
-            tag_size))
-      goto error;
-
-    GST_DEBUG ("  rights start date and time = %s",
-        mxf_timestamp_to_string (&self->rights_start_date_and_time, str));
-  } else if (memcmp (tag_ul, &rights_stop_date_and_time_ul, 16) == 0) {
-    if (!mxf_timestamp_parse (&self->rights_stop_date_and_time, tag_data,
-            tag_size))
-      goto error;
-
-    GST_DEBUG ("  rights stop date and time = %s",
-        mxf_timestamp_to_string (&self->rights_stop_date_and_time, str));
-  } else if (memcmp (tag_ul, &maximum_number_of_usages_ul, 16) == 0) {
-    if (tag_size != 2)
-      goto error;
-
-    self->maximum_number_of_usages = GST_READ_UINT16_BE (tag_data);
-    GST_DEBUG ("  maximum number of usages = %u",
-        self->maximum_number_of_usages);
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_rights_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 rights local tag 0x%04x of size %u", tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_rights_init (MXFDMS1Rights * self)
-{
-}
-
-static void
-mxf_dms1_rights_class_init (MXFDMS1RightsClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_rights_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_rights_handle_tag;
-  dm_class->type = 0x1c0200;
-}
-
-G_DEFINE_TYPE (MXFDMS1PictureFormat, mxf_dms1_picture_format, MXF_TYPE_DMS1);
-
-static void
-mxf_dms1_picture_format_finalize (GObject * object)
-{
-  MXFDMS1PictureFormat *self = MXF_DMS1_PICTURE_FORMAT (object);
-
-  g_free (self->colour_descriptor);
-  self->colour_descriptor = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_picture_format_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_picture_format_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1PictureFormat *self = MXF_DMS1_PICTURE_FORMAT (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 viewport_aspect_ratio_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, 0x04,
-    0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00
-  };
-  static const guint8 perceived_display_format_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x04,
-    0x01, 0x01, 0x01, 0x08, 0x00, 0x00, 0x00
-  };
-  static const guint8 colour_descriptor_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x03,
-    0x02, 0x01, 0x06, 0x04, 0x01, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &viewport_aspect_ratio_ul, 16) == 0) {
-    if (!mxf_fraction_parse (&self->viewport_aspect_ratio, tag_data, tag_size))
-      goto error;
-
-    GST_DEBUG ("  viewport aspect ratio = %u/%u", self->viewport_aspect_ratio.n,
-        self->viewport_aspect_ratio.d);
-  } else if (memcmp (tag_ul, &perceived_display_format_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->perceived_display_format, tag_data, tag_size);
-    GST_DEBUG ("  perceived display format = %s",
-        self->perceived_display_format);
-  } else if (memcmp (tag_ul, &colour_descriptor_ul, 16) == 0) {
-    self->colour_descriptor = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  colour descriptor = %s",
-        GST_STR_NULL (self->colour_descriptor));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_picture_format_parent_class)->handle_tag (metadata, primer,
-        tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 picture format local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_picture_format_init (MXFDMS1PictureFormat * self)
-{
-}
-
-static void
-mxf_dms1_picture_format_class_init (MXFDMS1PictureFormatClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_picture_format_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_picture_format_handle_tag;
-  dm_class->type = 0x1d0100;
-}
-
-G_DEFINE_TYPE (MXFDMS1DeviceParameters, mxf_dms1_device_parameters,
-    MXF_TYPE_DMS1_THESAURUS);
-
-static void
-mxf_dms1_device_parameters_finalize (GObject * object)
-{
-  MXFDMS1DeviceParameters *self = MXF_DMS1_DEVICE_PARAMETERS (object);
-
-  g_free (self->device_type);
-  self->device_type = NULL;
-
-  g_free (self->manufacturer);
-  self->manufacturer = NULL;
-
-  g_free (self->device_model);
-  self->device_model = NULL;
-
-  g_free (self->device_serial_number);
-  self->device_serial_number = NULL;
-
-  g_free (self->device_usage_description);
-  self->device_usage_description = NULL;
-
-  g_free (self->name_value_sets_uids);
-  self->name_value_sets_uids = NULL;
-
-  g_free (self->name_value_sets);
-  self->name_value_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_device_parameters_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_device_parameters_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1DeviceParameters *self = MXF_DMS1_DEVICE_PARAMETERS (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->name_value_sets)
-    memset (self->name_value_sets, 0,
-        sizeof (gpointer) * self->n_name_value_sets);
-  else
-    self->name_value_sets =
-        g_new0 (MXFDMS1NameValue *, self->n_name_value_sets);
-
-  for (i = 0; i < self->n_name_value_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->name_value_sets_uids[i]);
-    if (current && MXF_IS_DMS1_NAME_VALUE (current)) {
-      self->name_value_sets[i] = MXF_DMS1_NAME_VALUE (current);
-    }
-  }
-
-  return
-      MXF_METADATA_BASE_CLASS (mxf_dms1_device_parameters_parent_class)->resolve
-      (m, metadata);
-}
-
-static gboolean
-mxf_dms1_device_parameters_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1DeviceParameters *self = MXF_DMS1_DEVICE_PARAMETERS (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 device_type_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x01,
-    0x01, 0x20, 0x08, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 device_designation_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x01,
-    0x01, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 device_asset_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x01,
-    0x01, 0x20, 0x0c, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 ieee_device_identifier_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, 0x01,
-    0x01, 0x20, 0x05, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 manufacturer_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, 0x01,
-    0x0a, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 device_model_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x01,
-    0x01, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 device_serial_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x01,
-    0x01, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 device_usage_description_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x03, 0x03, 0x10, 0x01, 0x01, 0x00, 0x00
-  };
-  static const guint8 name_value_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x05, 0x40, 0x1f, 0x03
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &device_type_ul, 16) == 0) {
-    self->device_type = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  device type = %s", GST_STR_NULL (self->device_type));
-  } else if (memcmp (tag_ul, &device_designation_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->device_designation, tag_data, tag_size);
-    GST_DEBUG ("  device designation = %s", self->device_designation);
-  } else if (memcmp (tag_ul, &device_asset_number_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->device_asset_number, tag_data, tag_size);
-    GST_DEBUG ("  device asset number = %s", self->device_asset_number);
-  } else if (memcmp (tag_ul, &ieee_device_identifier_ul, 16) == 0) {
-    if (tag_size != 6)
-      goto error;
-
-    memcpy (self->ieee_device_identifier, tag_data, 6);
-    GST_DEBUG
-        ("  IEEE device identifier = 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x",
-        self->ieee_device_identifier[0], self->ieee_device_identifier[1],
-        self->ieee_device_identifier[2], self->ieee_device_identifier[3],
-        self->ieee_device_identifier[4], self->ieee_device_identifier[5]);
-  } else if (memcmp (tag_ul, &manufacturer_ul, 16) == 0) {
-    self->manufacturer = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  manufacturer = %s", GST_STR_NULL (self->manufacturer));
-  } else if (memcmp (tag_ul, &device_model_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->device_model, tag_data, tag_size);
-    GST_DEBUG ("  device model = %s", self->device_model);
-  } else if (memcmp (tag_ul, &device_serial_number_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->device_serial_number, tag_data, tag_size);
-    GST_DEBUG ("  device serial number = %s", self->device_serial_number);
-  } else if (memcmp (tag_ul, &device_usage_description_ul, 16) == 0) {
-    self->device_usage_description = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  device usage description = %s",
-        GST_STR_NULL (self->device_usage_description));
-  } else if (memcmp (tag_ul, &name_value_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->name_value_sets_uids,
-            &self->n_name_value_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of name-value sets = %u", self->n_name_value_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_name_value_sets; i++) {
-        GST_DEBUG ("    name-value sets %u = %s", i,
-            mxf_uuid_to_string (&self->name_value_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_device_parameters_parent_class)->handle_tag (metadata, primer,
-        tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 device parameters local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_device_parameters_init (MXFDMS1DeviceParameters * self)
-{
-}
-
-static void
-mxf_dms1_device_parameters_class_init (MXFDMS1DeviceParametersClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_device_parameters_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_device_parameters_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_device_parameters_resolve;
-  dm_class->type = 0x1e0100;
-}
-
-G_DEFINE_TYPE (MXFDMS1NameValue, mxf_dms1_name_value, MXF_TYPE_DMS1);
-
-static void
-mxf_dms1_name_value_finalize (GObject * object)
-{
-  MXFDMS1NameValue *self = MXF_DMS1_NAME_VALUE (object);
-
-  g_free (self->item_name);
-  self->item_name = NULL;
-
-  g_free (self->item_value);
-  self->item_value = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_name_value_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_name_value_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1NameValue *self = MXF_DMS1_NAME_VALUE (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 item_name_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x01, 0x02, 0x0a, 0x01, 0x01, 0x00, 0x00
-  };
-  static const guint8 item_value_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x03,
-    0x01, 0x02, 0x0a, 0x02, 0x01, 0x00, 0x00
-  };
-  static const guint8 smpte_universal_label_locator_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x01,
-    0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &item_name_ul, 16) == 0) {
-    self->item_name = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  item name = %s", GST_STR_NULL (self->item_name));
-  } else if (memcmp (tag_ul, &item_value_ul, 16) == 0) {
-    self->item_value = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  item value = %s", GST_STR_NULL (self->item_value));
-  } else if (memcmp (tag_ul, &smpte_universal_label_locator_ul, 16) == 0) {
-    if (tag_size != 16)
-      goto error;
-
-    memcpy (&self->smpte_universal_label_locator, tag_data, 16);
-    GST_DEBUG ("  SMPTE universal label locator = %s",
-        mxf_uuid_to_string (&self->smpte_universal_label_locator, str));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_name_value_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 name-value local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_name_value_init (MXFDMS1NameValue * self)
-{
-}
-
-static void
-mxf_dms1_name_value_class_init (MXFDMS1NameValueClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_name_value_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_name_value_handle_tag;
-  dm_class->type = 0x1f0100;
-}
-
-G_DEFINE_TYPE (MXFDMS1Processing, mxf_dms1_processing, MXF_TYPE_DMS1);
-
-static void
-mxf_dms1_processing_finalize (GObject * object)
-{
-  MXFDMS1Processing *self = MXF_DMS1_PROCESSING (object);
-
-  g_free (self->descriptive_comment);
-  self->descriptive_comment = NULL;
-
-  g_free (self->graphic_usage_type);
-  self->graphic_usage_type = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_processing_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_processing_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1Processing *self = MXF_DMS1_PROCESSING (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 quality_flag_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x05,
-    0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 descriptive_comment_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x03,
-    0x02, 0x03, 0x02, 0x02, 0x01, 0x00, 0x00
-  };
-  static const guint8 logo_flag_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x03, 0x05,
-    0x01, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 graphic_usage_type_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x05,
-    0x01, 0x01, 0x07, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 process_steps_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x05,
-    0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 generation_copy_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x05,
-    0x01, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00
-  };
-  static const guint8 generation_clone_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x01, 0x05,
-    0x01, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &quality_flag_ul, 16) == 0) {
-    if (tag_size != 1)
-      goto error;
-
-    self->quality_flag = GST_READ_UINT8 (tag_data);
-    GST_DEBUG ("  quality flag = %u", self->quality_flag);
-  } else if (memcmp (tag_ul, &descriptive_comment_ul, 16) == 0) {
-    self->descriptive_comment = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  descriptive comment = %s",
-        GST_STR_NULL (self->descriptive_comment));
-  } else if (memcmp (tag_ul, &logo_flag_ul, 16) == 0) {
-    if (tag_size != 1)
-      goto error;
-
-    self->logo_flag = GST_READ_UINT8 (tag_data);
-    GST_DEBUG ("  logo flag = %u", self->logo_flag);
-  } else if (memcmp (tag_ul, &graphic_usage_type_ul, 16) == 0) {
-    self->graphic_usage_type = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  graphic usage type = %s",
-        GST_STR_NULL (self->graphic_usage_type));
-  } else if (memcmp (tag_ul, &process_steps_ul, 16) == 0) {
-    if (tag_size != 2)
-      goto error;
-
-    self->process_steps = GST_READ_UINT16_BE (tag_data);
-    GST_DEBUG ("  process steps = %u", self->process_steps);
-  } else if (memcmp (tag_ul, &generation_copy_number_ul, 16) == 0) {
-    if (tag_size != 2)
-      goto error;
-
-    self->generation_copy_number = GST_READ_UINT16_BE (tag_data);
-    GST_DEBUG ("  generation copy number = %u", self->generation_copy_number);
-  } else if (memcmp (tag_ul, &generation_clone_number_ul, 16) == 0) {
-    if (tag_size != 2)
-      goto error;
-
-    self->generation_clone_number = GST_READ_UINT16_BE (tag_data);
-    GST_DEBUG ("  generation clone number = %u", self->generation_clone_number);
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_processing_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 processing local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_processing_init (MXFDMS1Processing * self)
-{
-}
-
-static void
-mxf_dms1_processing_class_init (MXFDMS1ProcessingClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_processing_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_processing_handle_tag;
-  dm_class->type = 0x200100;
-}
-
-G_DEFINE_TYPE (MXFDMS1Project, mxf_dms1_project, MXF_TYPE_DMS1);
-
-static void
-mxf_dms1_project_finalize (GObject * object)
-{
-  MXFDMS1Project *self = MXF_DMS1_PROJECT (object);
-
-  g_free (self->project_name_or_title);
-  self->project_name_or_title = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_project_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_project_handle_tag (MXFMetadataBase * metadata, MXFPrimerPack * primer,
-    guint16 tag, const guint8 * tag_data, guint tag_size)
-{
-  MXFDMS1Project *self = MXF_DMS1_PROJECT (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 project_number_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, 0x01,
-    0x03, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00
-  };
-  static const guint8 project_name_or_title_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x01,
-    0x03, 0x01, 0x08, 0x01, 0x00, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &project_number_ul, 16) == 0) {
-    if (tag_size > 32)
-      goto error;
-
-    memcpy (self->project_number, tag_data, tag_size);
-
-    GST_DEBUG ("  project number = %s", self->project_number);
-  } else if (memcmp (tag_ul, &project_name_or_title_ul, 16) == 0) {
-    self->project_name_or_title = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  project name or title = %s",
-        GST_STR_NULL (self->project_name_or_title));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_project_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 project local tag 0x%04x of size %u", tag, tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_project_init (MXFDMS1Project * self)
-{
-}
-
-static void
-mxf_dms1_project_class_init (MXFDMS1ProjectClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_project_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_project_handle_tag;
-  dm_class->type = 0x200200;
-}
-
-G_DEFINE_TYPE (MXFDMS1ContactsList, mxf_dms1_contacts_list, MXF_TYPE_DMS1);
-
-static void
-mxf_dms1_contacts_list_finalize (GObject * object)
-{
-  MXFDMS1ContactsList *self = MXF_DMS1_CONTACTS_LIST (object);
-
-  g_free (self->person_sets_uids);
-  self->person_sets_uids = NULL;
-
-  g_free (self->person_sets);
-  self->person_sets = NULL;
-
-  g_free (self->organisation_sets_uids);
-  self->organisation_sets_uids = NULL;
-
-  g_free (self->organisation_sets);
-  self->organisation_sets = NULL;
-
-  g_free (self->location_sets_uids);
-  self->location_sets_uids = NULL;
-
-  g_free (self->location_sets);
-  self->location_sets = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_contacts_list_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_contacts_list_resolve (MXFMetadataBase * m, GHashTable * metadata)
-{
-  MXFDMS1ContactsList *self = MXF_DMS1_CONTACTS_LIST (m);
-  MXFMetadataBase *current = NULL;
-  guint i;
-
-  if (self->person_sets)
-    memset (self->person_sets, 0, sizeof (gpointer) * self->n_person_sets);
-  else
-    self->person_sets = g_new0 (MXFDMS1Person *, self->n_person_sets);
-
-  if (self->organisation_sets)
-    memset (self->organisation_sets, 0,
-        sizeof (gpointer) * self->n_organisation_sets);
-  else
-    self->organisation_sets =
-        g_new0 (MXFDMS1Organisation *, self->n_organisation_sets);
-
-  if (self->location_sets)
-    memset (self->location_sets, 0, sizeof (gpointer) * self->n_location_sets);
-  else
-    self->location_sets = g_new0 (MXFDMS1Location *, self->n_location_sets);
-
-  for (i = 0; i < self->n_person_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->person_sets_uids[i]);
-    if (current && MXF_IS_DMS1_PERSON (current)) {
-      self->person_sets[i] = MXF_DMS1_PERSON (current);
-    }
-  }
-
-  for (i = 0; i < self->n_organisation_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->organisation_sets_uids[i]);
-    if (current && MXF_IS_DMS1_ORGANISATION (current)) {
-      self->organisation_sets[i] = MXF_DMS1_ORGANISATION (current);
-    }
-  }
-
-  for (i = 0; i < self->n_location_sets; i++) {
-    current = g_hash_table_lookup (metadata, &self->location_sets_uids[i]);
-    if (current && MXF_IS_DMS1_LOCATION (current)) {
-      self->location_sets[i] = MXF_DMS1_LOCATION (current);
-    }
-  }
-
-  return
-      MXF_METADATA_BASE_CLASS (mxf_dms1_contacts_list_parent_class)->resolve (m,
-      metadata);
-}
-
-static gboolean
-mxf_dms1_contacts_list_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1ContactsList *self = MXF_DMS1_CONTACTS_LIST (metadata);
-  gboolean ret = TRUE;
-#ifndef GST_DISABLE_GST_DEBUG
-  gchar str[48];
-#endif
-  MXFUL *tag_ul = NULL;
-  static const guint8 person_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x03, 0x40, 0x14, 0x00
-  };
-  static const guint8 organisation_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x03, 0x40, 0x15, 0x00
-  };
-  static const guint8 location_sets_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x05, 0x06,
-    0x01, 0x01, 0x04, 0x03, 0x40, 0x16, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &person_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->person_sets_uids, &self->n_person_sets,
-            tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of person sets = %u", self->n_person_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_person_sets; i++) {
-        GST_DEBUG ("    person sets %u = %s", i,
-            mxf_uuid_to_string (&self->person_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &organisation_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->organisation_sets_uids,
-            &self->n_organisation_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of organisation sets = %u", self->n_organisation_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_organisation_sets; i++) {
-        GST_DEBUG ("    organisation sets %u = %s", i,
-            mxf_uuid_to_string (&self->organisation_sets_uids[i], str));
-      }
-    }
-#endif
-  } else if (memcmp (tag_ul, &location_sets_ul, 16) == 0) {
-    if (!mxf_uuid_array_parse (&self->location_sets_uids,
-            &self->n_location_sets, tag_data, tag_size))
-      goto error;
-    GST_DEBUG ("  number of location sets = %u", self->n_location_sets);
-#ifndef GST_DISABLE_GST_DEBUG
-    {
-      guint i;
-      for (i = 0; i < self->n_location_sets; i++) {
-        GST_DEBUG ("    location sets %u = %s", i,
-            mxf_uuid_to_string (&self->location_sets_uids[i], str));
-      }
-    }
-#endif
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS
-        (mxf_dms1_contacts_list_parent_class)->handle_tag (metadata, primer,
-        tag, tag_data, tag_size);
-  }
-
-  return ret;
-
-error:
-
-  GST_ERROR ("Invalid DMS1 contacts list local tag 0x%04x of size %u", tag,
-      tag_size);
-
-  return FALSE;
-}
-
-static void
-mxf_dms1_contacts_list_init (MXFDMS1ContactsList * self)
-{
-}
-
-static void
-mxf_dms1_contacts_list_class_init (MXFDMS1ContactsListClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_contacts_list_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_contacts_list_handle_tag;
-  metadatabase_class->resolve = mxf_dms1_contacts_list_resolve;
-  dm_class->type = 0x190100;
-}
-
-G_DEFINE_TYPE (MXFDMS1CueWords, mxf_dms1_cue_words,
-    MXF_TYPE_DMS1_TEXT_LANGUAGE);
-
-static void
-mxf_dms1_cue_words_finalize (GObject * object)
-{
-  MXFDMS1CueWords *self = MXF_DMS1_CUE_WORDS (object);
-
-  g_free (self->in_cue_words);
-  self->in_cue_words = NULL;
-
-  g_free (self->out_cue_words);
-  self->out_cue_words = NULL;
-
-  G_OBJECT_CLASS (mxf_dms1_cue_words_parent_class)->finalize (object);
-}
-
-static gboolean
-mxf_dms1_cue_words_handle_tag (MXFMetadataBase * metadata,
-    MXFPrimerPack * primer, guint16 tag, const guint8 * tag_data,
-    guint tag_size)
-{
-  MXFDMS1CueWords *self = MXF_DMS1_CUE_WORDS (metadata);
-  gboolean ret = TRUE;
-  MXFUL *tag_ul = NULL;
-  static const guint8 in_cue_words_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x03,
-    0x02, 0x01, 0x02, 0x0d, 0x01, 0x00, 0x00
-  };
-  static const guint8 out_cue_words_ul[] = {
-    0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x04, 0x03,
-    0x02, 0x01, 0x02, 0x0e, 0x01, 0x00, 0x00
-  };
-
-  if (!(tag_ul =
-          (MXFUL *) g_hash_table_lookup (primer->mappings,
-              GUINT_TO_POINTER (((guint) tag)))))
-    return FALSE;
-
-  if (memcmp (tag_ul, &in_cue_words_ul, 16) == 0) {
-    self->in_cue_words = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  in cue words = %s", GST_STR_NULL (self->in_cue_words));
-  } else if (memcmp (tag_ul, &out_cue_words_ul, 16) == 0) {
-    self->out_cue_words = mxf_utf16_to_utf8 (tag_data, tag_size);
-    GST_DEBUG ("  out cue words = %s", GST_STR_NULL (self->out_cue_words));
-  } else {
-    ret =
-        MXF_METADATA_BASE_CLASS (mxf_dms1_cue_words_parent_class)->handle_tag
-        (metadata, primer, tag, tag_data, tag_size);
-  }
-
-  return ret;
-}
-
-static void
-mxf_dms1_cue_words_init (MXFDMS1CueWords * self)
-{
-}
-
-static void
-mxf_dms1_cue_words_class_init (MXFDMS1CueWordsClass * klass)
-{
-  GObjectClass *object_class = (GObjectClass *) klass;
-  MXFMetadataBaseClass *metadatabase_class = (MXFMetadataBaseClass *) klass;
-  MXFDescriptiveMetadataClass *dm_class = (MXFDescriptiveMetadataClass *) klass;
-
-  object_class->finalize = mxf_dms1_cue_words_finalize;
-  metadatabase_class->handle_tag = mxf_dms1_cue_words_handle_tag;
-  dm_class->type = 0x170800;
-}
-
-#define _add_dm_type(type) G_STMT_START { \
-  GType tmp = type; \
-  \
-  g_array_append_val (dms1_sets, tmp); \
-} G_STMT_END
-
-void
-mxf_dms1_initialize (void)
-{
-  GArray *dms1_sets = g_array_new (TRUE, TRUE, sizeof (GType));
-
-  _add_dm_type (MXF_TYPE_DMS1_PRODUCTION_FRAMEWORK);
-  _add_dm_type (MXF_TYPE_DMS1_CLIP_FRAMEWORK);
-  _add_dm_type (MXF_TYPE_DMS1_SCENE_FRAMEWORK);
-  _add_dm_type (MXF_TYPE_DMS1_TITLES);
-  _add_dm_type (MXF_TYPE_DMS1_IDENTIFICATION);
-  _add_dm_type (MXF_TYPE_DMS1_GROUP_RELATIONSHIP);
-  _add_dm_type (MXF_TYPE_DMS1_BRANDING);
-  _add_dm_type (MXF_TYPE_DMS1_EVENT);
-  _add_dm_type (MXF_TYPE_DMS1_PUBLICATION);
-  _add_dm_type (MXF_TYPE_DMS1_AWARD);
-  _add_dm_type (MXF_TYPE_DMS1_CAPTIONS_DESCRIPTION);
-  _add_dm_type (MXF_TYPE_DMS1_ANNOTATION);
-  _add_dm_type (MXF_TYPE_DMS1_SETTING_PERIOD);
-  _add_dm_type (MXF_TYPE_DMS1_SCRIPTING);
-  _add_dm_type (MXF_TYPE_DMS1_CLASSIFICATION);
-  _add_dm_type (MXF_TYPE_DMS1_SHOT);
-  _add_dm_type (MXF_TYPE_DMS1_KEY_POINT);
-  _add_dm_type (MXF_TYPE_DMS1_PARTICIPANT);
-  _add_dm_type (MXF_TYPE_DMS1_PERSON);
-  _add_dm_type (MXF_TYPE_DMS1_ORGANISATION);
-  _add_dm_type (MXF_TYPE_DMS1_LOCATION);
-  _add_dm_type (MXF_TYPE_DMS1_ADDRESS);
-  _add_dm_type (MXF_TYPE_DMS1_COMMUNICATIONS);
-  _add_dm_type (MXF_TYPE_DMS1_CONTRACT);
-  _add_dm_type (MXF_TYPE_DMS1_RIGHTS);
-  _add_dm_type (MXF_TYPE_DMS1_PICTURE_FORMAT);
-  _add_dm_type (MXF_TYPE_DMS1_DEVICE_PARAMETERS);
-  _add_dm_type (MXF_TYPE_DMS1_NAME_VALUE);
-  _add_dm_type (MXF_TYPE_DMS1_PROCESSING);
-  _add_dm_type (MXF_TYPE_DMS1_PROJECT);
-  _add_dm_type (MXF_TYPE_DMS1_CONTACTS_LIST);
-  _add_dm_type (MXF_TYPE_DMS1_CUE_WORDS);
-
-  mxf_descriptive_metadata_register (0x01, (GType *) g_array_free (dms1_sets,
-          FALSE));
-}
-
-#undef _add_dm_type
-
-#undef ADD_SET
diff --git a/gst/mxf/mxfdms1.h b/gst/mxf/mxfdms1.h
deleted file mode 100644
index 78f32e4..0000000
--- a/gst/mxf/mxfdms1.h
+++ /dev/null
@@ -1,933 +0,0 @@
-/* GStreamer
- * Copyright (C) 2008-2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* Implementation of SMPTE S380M - Descriptive  Scheme-1 */
-
-#ifndef _MXF_DMS1_H_
-#define _MXF_DMS1_H_
-
-#include <gst/gst.h>
-#include "mxfmetadata.h"
-
-#define MXF_TYPE_DMS1 \
-  (mxf_dms1_get_type())
-#define MXF_DMS1(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1, MXFDMS1))
-#define MXF_IS_DMS1(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1))
-typedef struct _MXFDMS1 MXFDMS1;
-typedef MXFDescriptiveMetadataClass MXFDMS1Class;
-GType mxf_dms1_get_type (void);
-
-#define MXF_TYPE_DMS1_TEXT_LANGUAGE \
-  (mxf_dms1_text_language_get_type())
-#define MXF_DMS1_TEXT_LANGUAGE(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_TEXT_LANGUAGE, MXFDMS1TextLanguage))
-#define MXF_IS_DMS1_TEXT_LANGUAGE(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_TEXT_LANGUAGE))
-typedef struct _MXFDMS1TextLanguage MXFDMS1TextLanguage;
-typedef MXFDescriptiveMetadataClass MXFDMS1TextLanguageClass;
-GType mxf_dms1_text_language_get_type (void);
-
-#define MXF_TYPE_DMS1_THESAURUS \
-  (mxf_dms1_thesaurus_get_type())
-#define MXF_DMS1_THESAURUS(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_THESAURUS, MXFDMS1Thesaurus))
-#define MXF_IS_DMS1_THESAURUS(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_THESAURUS))
-typedef struct _MXFDMS1Thesaurus MXFDMS1Thesaurus;
-typedef MXFDescriptiveMetadataClass MXFDMS1ThesaurusClass;
-GType mxf_dms1_thesaurus_get_type (void);
-
-#define MXF_TYPE_DMS1_FRAMEWORK \
-  (mxf_dms1_framework_get_type())
-#define MXF_DMS1_FRAMEWORK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_FRAMEWORK, MXFDMS1Framework))
-#define MXF_IS_DMS1_FRAMEWORK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_FRAMEWORK))
-typedef struct _MXFDMS1Framework MXFDMS1Framework;
-typedef MXFDescriptiveMetadataClass MXFDMS1FrameworkClass;
-GType mxf_dms1_framework_get_type (void);
-
-#define MXF_TYPE_DMS1_PRODUCTION_CLIP_FRAMEWORK \
-  (mxf_dms1_production_clip_framework_get_type())
-#define MXF_DMS1_PRODUCTION_CLIP_FRAMEWORK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PRODUCTION_CLIP_FRAMEWORK, MXFDMS1ProductionClipFramework))
-#define MXF_IS_DMS1_PRODUCTION_CLIP_FRAMEWORK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PRODUCTION_CLIP_FRAMEWORK))
-typedef struct _MXFDMS1ProductionClipFramework MXFDMS1ProductionClipFramework;
-typedef MXFDescriptiveMetadataClass MXFDMS1ProductionClipFrameworkClass;
-GType mxf_dms1_production_clip_framework_get_type (void);
-
-#define MXF_TYPE_DMS1_PRODUCTION_FRAMEWORK \
-  (mxf_dms1_production_framework_get_type())
-#define MXF_DMS1_PRODUCTION_FRAMEWORK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PRODUCTION_FRAMEWORK, MXFDMS1ProductionFramework))
-#define MXF_IS_DMS1_PRODUCTION_FRAMEWORK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PRODUCTION_FRAMEWORK))
-typedef struct _MXFDMS1ProductionFramework MXFDMS1ProductionFramework;
-typedef MXFDescriptiveMetadataClass MXFDMS1ProductionFrameworkClass;
-GType mxf_dms1_production_framework_get_type (void);
-
-#define MXF_TYPE_DMS1_CLIP_FRAMEWORK \
-  (mxf_dms1_clip_framework_get_type())
-#define MXF_DMS1_CLIP_FRAMEWORK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CLIP_FRAMEWORK, MXFDMS1ClipFramework))
-#define MXF_IS_DMS1_CLIP_FRAMEWORK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CLIP_FRAMEWORK))
-typedef struct _MXFDMS1ClipFramework MXFDMS1ClipFramework;
-typedef MXFDescriptiveMetadataClass MXFDMS1ClipFrameworkClass;
-GType mxf_dms1_clip_framework_get_type (void);
-
-#define MXF_TYPE_DMS1_SCENE_FRAMEWORK \
-  (mxf_dms1_scene_framework_get_type())
-#define MXF_DMS1_SCENE_FRAMEWORK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_SCENE_FRAMEWORK, MXFDMS1SceneFramework))
-#define MXF_IS_DMS1_SCENE_FRAMEWORK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_SCENE_FRAMEWORK))
-typedef struct _MXFDMS1SceneFramework MXFDMS1SceneFramework;
-typedef MXFDescriptiveMetadataClass MXFDMS1SceneFrameworkClass;
-GType mxf_dms1_scene_framework_get_type (void);
-
-#define MXF_TYPE_DMS1_TITLES \
-  (mxf_dms1_titles_get_type())
-#define MXF_DMS1_TITLES(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_TITLES, MXFDMS1Titles))
-#define MXF_IS_DMS1_TITLES(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_TITLES))
-typedef struct _MXFDMS1Titles MXFDMS1Titles;
-typedef MXFDescriptiveMetadataClass MXFDMS1TitlesClass;
-GType mxf_dms1_titles_get_type (void);
-
-#define MXF_TYPE_DMS1_IDENTIFICATION \
-  (mxf_dms1_identification_get_type())
-#define MXF_DMS1_IDENTIFICATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_IDENTIFICATION, MXFDMS1Identification))
-#define MXF_IS_DMS1_IDENTIFICATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_IDENTIFICATION))
-typedef struct _MXFDMS1Identification MXFDMS1Identification;
-typedef MXFDescriptiveMetadataClass MXFDMS1IdentificationClass;
-GType mxf_dms1_identification_get_type (void);
-
-#define MXF_TYPE_DMS1_GROUP_RELATIONSHIP \
-  (mxf_dms1_group_relationship_get_type())
-#define MXF_DMS1_GROUP_RELATIONSHIP(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_GROUP_RELATIONSHIP, MXFDMS1GroupRelationship))
-#define MXF_IS_DMS1_GROUP_RELATIONSHIP(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_GROUP_RELATIONSHIP))
-typedef struct _MXFDMS1GroupRelationship MXFDMS1GroupRelationship;
-typedef MXFDescriptiveMetadataClass MXFDMS1GroupRelationshipClass;
-GType mxf_dms1_group_relationship_get_type (void);
-
-#define MXF_TYPE_DMS1_BRANDING \
-  (mxf_dms1_branding_get_type())
-#define MXF_DMS1_BRANDING(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_BRANDING, MXFDMS1Branding))
-#define MXF_IS_DMS1_BRANDING(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_BRANDING))
-typedef struct _MXFDMS1Branding MXFDMS1Branding;
-typedef MXFDescriptiveMetadataClass MXFDMS1BrandingClass;
-GType mxf_dms1_branding_get_type (void);
-
-#define MXF_TYPE_DMS1_EVENT \
-  (mxf_dms1_event_get_type())
-#define MXF_DMS1_EVENT(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_EVENT, MXFDMS1Event))
-#define MXF_IS_DMS1_EVENT(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_EVENT))
-typedef struct _MXFDMS1Event MXFDMS1Event;
-typedef MXFDescriptiveMetadataClass MXFDMS1EventClass;
-GType mxf_dms1_event_get_type (void);
-
-#define MXF_TYPE_DMS1_PUBLICATION \
-  (mxf_dms1_publication_get_type())
-#define MXF_DMS1_PUBLICATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PUBLICATION, MXFDMS1Publication))
-#define MXF_IS_DMS1_PUBLICATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PUBLICATION))
-typedef struct _MXFDMS1Publication MXFDMS1Publication;
-typedef MXFDescriptiveMetadataClass MXFDMS1PublicationClass;
-GType mxf_dms1_publication_get_type (void);
-
-#define MXF_TYPE_DMS1_AWARD \
-  (mxf_dms1_award_get_type())
-#define MXF_DMS1_AWARD(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_AWARD, MXFDMS1Award))
-#define MXF_IS_DMS1_AWARD(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_AWARD))
-typedef struct _MXFDMS1Award MXFDMS1Award;
-typedef MXFDescriptiveMetadataClass MXFDMS1AwardClass;
-GType mxf_dms1_award_get_type (void);
-
-#define MXF_TYPE_DMS1_CAPTIONS_DESCRIPTION \
-  (mxf_dms1_captions_description_get_type())
-#define MXF_DMS1_CAPTIONS_DESCRIPTION(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CAPTIONS_DESCRIPTION, MXFDMS1CaptionsDescription))
-#define MXF_IS_DMS1_CAPTIONS_DESCRIPTION(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CAPTIONS_DESCRIPTION))
-typedef struct _MXFDMS1CaptionsDescription MXFDMS1CaptionsDescription;
-typedef MXFDescriptiveMetadataClass MXFDMS1CaptionsDescriptionClass;
-GType mxf_dms1_captions_description_get_type (void);
-
-#define MXF_TYPE_DMS1_ANNOTATION \
-  (mxf_dms1_annotation_get_type())
-#define MXF_DMS1_ANNOTATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_ANNOTATION, MXFDMS1Annotation))
-#define MXF_IS_DMS1_ANNOTATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_ANNOTATION))
-typedef struct _MXFDMS1Annotation MXFDMS1Annotation;
-typedef MXFDescriptiveMetadataClass MXFDMS1AnnotationClass;
-GType mxf_dms1_annotation_get_type (void);
-
-#define MXF_TYPE_DMS1_SETTING_PERIOD \
-  (mxf_dms1_setting_period_get_type())
-#define MXF_DMS1_SETTING_PERIOD(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_SETTING_PERIOD, MXFDMS1SettingPeriod))
-#define MXF_IS_DMS1_SETTING_PERIOD(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_SETTING_PERIOD))
-typedef struct _MXFDMS1SettingPeriod MXFDMS1SettingPeriod;
-typedef MXFDescriptiveMetadataClass MXFDMS1SettingPeriodClass;
-GType mxf_dms1_setting_period_get_type (void);
-
-#define MXF_TYPE_DMS1_SCRIPTING \
-  (mxf_dms1_scripting_get_type())
-#define MXF_DMS1_SCRIPTING(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_SCRIPTING, MXFDMS1Scripting))
-#define MXF_IS_DMS1_SCRIPTING(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_SCRIPTING))
-typedef struct _MXFDMS1Scripting MXFDMS1Scripting;
-typedef MXFDescriptiveMetadataClass MXFDMS1ScriptingClass;
-GType mxf_dms1_scripting_get_type (void);
-
-#define MXF_TYPE_DMS1_CLASSIFICATION \
-  (mxf_dms1_classification_get_type())
-#define MXF_DMS1_CLASSIFICATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CLASSIFICATION, MXFDMS1Classification))
-#define MXF_IS_DMS1_CLASSIFICATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CLASSIFICATION))
-typedef struct _MXFDMS1Classification MXFDMS1Classification;
-typedef MXFDescriptiveMetadataClass MXFDMS1ClassificationClass;
-GType mxf_dms1_classification_get_type (void);
-
-#define MXF_TYPE_DMS1_SHOT \
-  (mxf_dms1_shot_get_type())
-#define MXF_DMS1_SHOT(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_SHOT, MXFDMS1Shot))
-#define MXF_IS_DMS1_SHOT(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_SHOT))
-typedef struct _MXFDMS1Shot MXFDMS1Shot;
-typedef MXFDescriptiveMetadataClass MXFDMS1ShotClass;
-GType mxf_dms1_shot_get_type (void);
-
-#define MXF_TYPE_DMS1_KEY_POINT \
-  (mxf_dms1_key_point_get_type())
-#define MXF_DMS1_KEY_POINT(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_KEY_POINT, MXFDMS1KeyPoint))
-#define MXF_IS_DMS1_KEY_POINT(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_KEY_POINT))
-typedef struct _MXFDMS1KeyPoint MXFDMS1KeyPoint;
-typedef MXFDescriptiveMetadataClass MXFDMS1KeyPointClass;
-GType mxf_dms1_key_point_get_type (void);
-
-#define MXF_TYPE_DMS1_PARTICIPANT \
-  (mxf_dms1_participant_get_type())
-#define MXF_DMS1_PARTICIPANT(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PARTICIPANT, MXFDMS1Participant))
-#define MXF_IS_DMS1_PARTICIPANT(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PARTICIPANT))
-typedef struct _MXFDMS1Participant MXFDMS1Participant;
-typedef MXFDescriptiveMetadataClass MXFDMS1ParticipantClass;
-GType mxf_dms1_participant_get_type (void);
-
-#define MXF_TYPE_DMS1_CONTACT \
-  (mxf_dms1_contact_get_type())
-#define MXF_DMS1_CONTACT(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CONTACT, MXFDMS1Contact))
-#define MXF_IS_DMS1_CONTACT(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CONTACT))
-typedef struct _MXFDMS1Contact MXFDMS1Contact;
-typedef MXFDescriptiveMetadataClass MXFDMS1ContactClass;
-GType mxf_dms1_contact_get_type (void);
-
-#define MXF_TYPE_DMS1_PERSON \
-  (mxf_dms1_person_get_type())
-#define MXF_DMS1_PERSON(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PERSON, MXFDMS1Person))
-#define MXF_IS_DMS1_PERSON(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PERSON))
-typedef struct _MXFDMS1Person MXFDMS1Person;
-typedef MXFDescriptiveMetadataClass MXFDMS1PersonClass;
-GType mxf_dms1_person_get_type (void);
-
-#define MXF_TYPE_DMS1_ORGANISATION \
-  (mxf_dms1_organisation_get_type())
-#define MXF_DMS1_ORGANISATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_ORGANISATION, MXFDMS1Organisation))
-#define MXF_IS_DMS1_ORGANISATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_ORGANISATION))
-typedef struct _MXFDMS1Organisation MXFDMS1Organisation;
-typedef MXFDescriptiveMetadataClass MXFDMS1OrganisationClass;
-GType mxf_dms1_organisation_get_type (void);
-
-#define MXF_TYPE_DMS1_LOCATION \
-  (mxf_dms1_location_get_type())
-#define MXF_DMS1_LOCATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_LOCATION, MXFDMS1Location))
-#define MXF_IS_DMS1_LOCATION(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_LOCATION))
-typedef struct _MXFDMS1Location MXFDMS1Location;
-typedef MXFDescriptiveMetadataClass MXFDMS1LocationClass;
-GType mxf_dms1_location_get_type (void);
-
-#define MXF_TYPE_DMS1_ADDRESS \
-  (mxf_dms1_address_get_type())
-#define MXF_DMS1_ADDRESS(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_ADDRESS, MXFDMS1Address))
-#define MXF_IS_DMS1_ADDRESS(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_ADDRESS))
-typedef struct _MXFDMS1Address MXFDMS1Address;
-typedef MXFDescriptiveMetadataClass MXFDMS1AddressClass;
-GType mxf_dms1_address_get_type (void);
-
-#define MXF_TYPE_DMS1_COMMUNICATIONS \
-  (mxf_dms1_communications_get_type())
-#define MXF_DMS1_COMMUNICATIONS(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_COMMUNICATIONS, MXFDMS1Communications))
-#define MXF_IS_DMS1_COMMUNICATIONS(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_COMMUNICATIONS))
-typedef struct _MXFDMS1Communications MXFDMS1Communications;
-typedef MXFDescriptiveMetadataClass MXFDMS1CommunicationsClass;
-GType mxf_dms1_communications_get_type (void);
-
-#define MXF_TYPE_DMS1_CONTRACT \
-  (mxf_dms1_contract_get_type())
-#define MXF_DMS1_CONTRACT(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CONTRACT, MXFDMS1Contract))
-#define MXF_IS_DMS1_CONTRACT(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CONTRACT))
-typedef struct _MXFDMS1Contract MXFDMS1Contract;
-typedef MXFDescriptiveMetadataClass MXFDMS1ContractClass;
-GType mxf_dms1_contract_get_type (void);
-
-#define MXF_TYPE_DMS1_RIGHTS \
-  (mxf_dms1_rights_get_type())
-#define MXF_DMS1_RIGHTS(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_RIGHTS, MXFDMS1Rights))
-#define MXF_IS_DMS1_RIGHTS(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_RIGHTS))
-typedef struct _MXFDMS1Rights MXFDMS1Rights;
-typedef MXFDescriptiveMetadataClass MXFDMS1RightsClass;
-GType mxf_dms1_rights_get_type (void);
-
-#define MXF_TYPE_DMS1_PICTURE_FORMAT \
-  (mxf_dms1_picture_format_get_type())
-#define MXF_DMS1_PICTURE_FORMAT(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PICTURE_FORMAT, MXFDMS1PictureFormat))
-#define MXF_IS_DMS1_PICTURE_FORMAT(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PICTURE_FORMAT))
-typedef struct _MXFDMS1PictureFormat MXFDMS1PictureFormat;
-typedef MXFDescriptiveMetadataClass MXFDMS1PictureFormatClass;
-GType mxf_dms1_picture_format_get_type (void);
-
-#define MXF_TYPE_DMS1_DEVICE_PARAMETERS \
-  (mxf_dms1_device_parameters_get_type())
-#define MXF_DMS1_DEVICE_PARAMETERS(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_DEVICE_PARAMETERS, MXFDMS1DeviceParameters))
-#define MXF_IS_DMS1_DEVICE_PARAMETERS(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_DEVICE_PARAMETERS))
-typedef struct _MXFDMS1DeviceParameters MXFDMS1DeviceParameters;
-typedef MXFDescriptiveMetadataClass MXFDMS1DeviceParametersClass;
-GType mxf_dms1_device_parameters_get_type (void);
-
-#define MXF_TYPE_DMS1_NAME_VALUE \
-  (mxf_dms1_name_value_get_type())
-#define MXF_DMS1_NAME_VALUE(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_NAME_VALUE, MXFDMS1NameValue))
-#define MXF_IS_DMS1_NAME_VALUE(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_NAME_VALUE))
-typedef struct _MXFDMS1NameValue MXFDMS1NameValue;
-typedef MXFDescriptiveMetadataClass MXFDMS1NameValueClass;
-GType mxf_dms1_name_value_get_type (void);
-
-#define MXF_TYPE_DMS1_PROCESSING \
-  (mxf_dms1_processing_get_type())
-#define MXF_DMS1_PROCESSING(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PROCESSING, MXFDMS1Processing))
-#define MXF_IS_DMS1_PROCESSING(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PROCESSING))
-typedef struct _MXFDMS1Processing MXFDMS1Processing;
-typedef MXFDescriptiveMetadataClass MXFDMS1ProcessingClass;
-GType mxf_dms1_processing_get_type (void);
-
-#define MXF_TYPE_DMS1_PROJECT \
-  (mxf_dms1_project_get_type())
-#define MXF_DMS1_PROJECT(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_PROJECT, MXFDMS1Project))
-#define MXF_IS_DMS1_PROJECT(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_PROJECT))
-typedef struct _MXFDMS1Project MXFDMS1Project;
-typedef MXFDescriptiveMetadataClass MXFDMS1ProjectClass;
-GType mxf_dms1_project_get_type (void);
-
-#define MXF_TYPE_DMS1_CONTACTS_LIST \
-  (mxf_dms1_contacts_list_get_type())
-#define MXF_DMS1_CONTACTS_LIST(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CONTACTS_LIST, MXFDMS1ContactsList))
-#define MXF_IS_DMS1_CONTACTS_LIST(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CONTACTS_LIST))
-typedef struct _MXFDMS1ContactsList MXFDMS1ContactsList;
-typedef MXFDescriptiveMetadataClass MXFDMS1ContactsListClass;
-GType mxf_dms1_contacts_list_get_type (void);
-
-#define MXF_TYPE_DMS1_CUE_WORDS \
-  (mxf_dms1_cue_words_get_type())
-#define MXF_DMS1_CUE_WORDS(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),MXF_TYPE_DMS1_CUE_WORDS, MXFDMS1CueWords))
-#define MXF_IS_DMS1_CUE_WORDS(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),MXF_TYPE_DMS1_CUE_WORDS))
-typedef struct _MXFDMS1CueWords MXFDMS1CueWords;
-typedef MXFDescriptiveMetadataClass MXFDMS1CueWordsClass;
-GType mxf_dms1_cue_words_get_type (void);
-
-struct _MXFDMS1 {
-  MXFDescriptiveMetadata parent;
-};
-
-struct _MXFDMS1TextLanguage {
-  MXFDMS1 parent;
-
-  gchar extended_text_language_code[13];
-};
-
-struct _MXFDMS1Thesaurus {
-  MXFDMS1TextLanguage parent;
-
-  gchar *thesaurus_name;
-};
-
-struct _MXFDMS1Framework {
-  MXFDMS1 parent;
-
-  gchar framework_extended_text_language_code[13];
-  gchar *framework_thesaurus_name;
-  gchar *framework_title;
-  gchar primary_extended_spoken_language_code[13];
-  gchar secondary_extended_spoken_language_code[13];
-  gchar original_extended_spoken_language_code[13];
-
-  guint32 n_metadata_server_locators;
-  MXFUUID *metadata_server_locators_uids;
-  /* TODO */
-
-  guint32 n_titles_sets;
-  MXFUUID *titles_sets_uids;
-  MXFDMS1Titles **titles_sets;
-
-  guint32 n_annotation_sets;
-  MXFUUID *annotation_sets_uids;
-  MXFDMS1Annotation **annotation_sets;
-
-  guint32 n_participant_sets;
-  MXFUUID *participant_sets_uids;
-  MXFDMS1Participant **participant_sets;
-
-  MXFUUID contacts_list_set_uid;
-  MXFDMS1ContactsList *contacts_list_set;
-
-  guint32 n_location_sets;
-  MXFUUID *location_sets_uids;
-  MXFDMS1Location **location_sets;
-};
-
-struct _MXFDMS1ProductionClipFramework {
-  MXFDMS1Framework parent;
-
-  MXFUUID picture_format_set_uid;
-  MXFDMS1PictureFormat *picture_format;
-  
-  guint32 n_captions_description_sets;
-  MXFUUID *captions_description_sets_uids;
-  MXFDMS1CaptionsDescription **captions_description_sets;
-
-  guint32 n_contract_sets;
-  MXFUUID *contract_sets_uids;
-  MXFDMS1Contract **contract_sets;
-
-  MXFUUID project_set_uid;
-  MXFDMS1Project *project_set;
-};
-
-struct _MXFDMS1ProductionFramework {
-  MXFDMS1ProductionClipFramework parent;
-
-  gchar *integration_indication;
-  
-  guint32 n_identification_sets;
-  MXFUUID *identification_sets_uids;
-  MXFDMS1Identification **identification_sets;
-
-  guint32 n_group_relationship_sets;
-  MXFUUID *group_relationship_sets_uids;
-  MXFDMS1GroupRelationship **group_relationship_sets;
-
-  guint32 n_branding_sets;
-  MXFUUID *branding_sets_uids;
-  MXFDMS1Branding **branding_sets;
-
-  guint32 n_event_sets;
-  MXFUUID *event_sets_uids;
-  MXFDMS1Event **event_sets;
-
-  guint32 n_award_sets;
-  MXFUUID *award_sets_uids;
-  MXFDMS1Award **award_sets;
-
-  guint32 n_setting_period_sets;
-  MXFUUID *setting_period_sets_uids;
-  MXFDMS1SettingPeriod **setting_period_sets;
-};
-
-struct _MXFDMS1ClipFramework {
-  MXFDMS1ProductionClipFramework parent;
-
-  gchar *clip_kind;
-  gchar clip_number[33];
-  
-  guint8 extended_clip_id[64];
-  gboolean extended_clip_id_full;
-
-  MXFTimestamp clip_creation_date_and_time;
-  
-  guint16 take_number;
-
-  gchar *slate_information;
-
-  guint32 n_scripting_sets;
-  MXFUUID *scripting_sets_uids;
-  MXFDMS1Scripting **scripting_sets;
-
-  guint32 n_shot_sets;
-  MXFUUID *shot_sets_uids;
-  MXFDMS1Shot **shot_sets;
-
-  guint32 n_device_parameters_sets;
-  MXFUUID *device_parameters_sets_uids;
-  MXFDMS1DeviceParameters **device_parameters_sets;
-
-  MXFUUID processing_set_uid;
-  MXFDMS1Processing *processing_set;
-};
-
-struct _MXFDMS1SceneFramework {
-  MXFDMS1Framework parent;
-
-  gchar scene_number[33];
-
-  guint32 n_setting_period_sets;
-  MXFUUID *setting_period_sets_uids;
-  MXFDMS1SettingPeriod **setting_period_sets;
-
-  guint32 n_shot_scene_sets;
-  MXFUUID *shot_scene_sets_uids;
-  MXFDMS1Shot **shot_scene_sets;
-};
-
-struct _MXFDMS1Titles {
-  MXFDMS1TextLanguage parent;
-
-  gchar *main_title;
-  gchar *secondary_title;
-  gchar *working_title;
-  gchar *original_title;
-  gchar *version_title;
-};
-
-struct _MXFDMS1Identification {
-  MXFDMS1Thesaurus parent;
-
-  gchar identifier_kind[33];
-  guint8 *identifier_value;
-  guint16 identifier_value_length;
-  MXFUUID identification_locator;
-  gchar *identification_issuing_authority;
-};
-
-struct _MXFDMS1GroupRelationship {
-  MXFDMS1Thesaurus parent;
-
-  gchar *programming_group_kind;
-  gchar* programming_group_title;
-  gchar *group_synopsis;
-  guint32 numerical_position_in_sequence;
-  guint32 total_number_in_the_sequence;
-  guint16 episodic_start_number;
-  guint16 episodic_end_number;
-};
-
-struct _MXFDMS1Branding {
-  MXFDMS1TextLanguage parent;
-
-  gchar *brand_main_title;
-  gchar *brand_original_title;
-};
-
-struct _MXFDMS1Event {
-  MXFDMS1Thesaurus parent;
-
-  gchar *event_indication;
-  gchar event_start_date_and_time[33];
-  gchar event_end_date_and_time[33];
-  
-  guint32 n_publication_sets;
-  MXFUUID *publication_sets_uids;
-  MXFDMS1Publication **publication_sets;
-
-  guint32 n_annotation_sets;
-  MXFUUID *annotation_sets_uids;
-  MXFDMS1Annotation **annotation_sets;
-};
-
-struct _MXFDMS1Publication {
-  MXFDMS1 parent;
-
-  gchar *publication_organisation_name;
-  gchar *publication_service_name;
-  gchar *publication_medium;
-  gchar *publication_region;
-};
-
-struct _MXFDMS1Award {
-  MXFDMS1Thesaurus parent;
-
-  gchar *festival;
-  gchar festival_date_and_time[33];
-  gchar *award_name;
-  gchar *award_classification;
-  gchar *nomination_category;
-
-  guint32 n_participant_sets;
-  MXFUUID *participant_sets_uids;
-  MXFDMS1Participant **participant_sets;
-};
-
-struct _MXFDMS1CaptionsDescription {
-  MXFDMS1Thesaurus parent;
-
-  gchar extended_captions_language_code[13];
-  gchar *caption_kind;
-};
-
-struct _MXFDMS1Annotation {
-  MXFDMS1Thesaurus parent;
-
-  gchar *annotation_kind;
-  gchar *annotation_synopsis;
-  gchar *annotation_description;
-  gchar *related_material_description;
-
-  guint32 n_classification_sets;
-  MXFUUID *classification_sets_uids;
-  MXFDMS1Classification **classification_sets;
-
-  MXFUUID cue_words_set_uid;
-  MXFDMS1CueWords *cue_words_set;
-
-  guint32 n_related_material_locators;
-  MXFUUID *related_material_locators;
-  /* TODO */
-  
-  guint32 n_participant_sets;
-  MXFUUID *participant_sets_uids;
-  MXFDMS1Participant **participant_sets;
-};
-
-struct _MXFDMS1SettingPeriod {
-  MXFDMS1Thesaurus parent;
-
-  MXFTimestamp setting_date_and_time;
-  gchar *time_period_keyword;
-  gchar *setting_period_description;
-};
-
-struct _MXFDMS1Scripting {
-  MXFDMS1Thesaurus parent;
-
-  gchar *scripting_kind;
-  gchar *scripting_text;
-
-  guint32 n_scripting_locators;
-  MXFUUID *scripting_locators;
-  /* TODO */
-};
-
-struct _MXFDMS1Classification {
-  MXFDMS1Thesaurus parent;
-
-  gchar content_classification[128];
-
-  guint32 n_name_value_sets;
-  MXFUUID *name_value_sets_uids;
-  MXFDMS1NameValue **name_value_sets;
-};
-
-struct _MXFDMS1Shot {
-  MXFDMS1TextLanguage parent;
-
-  gint64 shot_start_position;
-  gint64 shot_duration;
-
-  guint32 n_shot_track_ids;
-  guint32 *shot_track_ids;
-  
-  gchar *shot_description;
-  gchar *shot_comment_kind;
-  gchar *shot_comment;
-
-  MXFUUID cue_words_set_uid;
-  MXFDMS1CueWords *cue_words_set;
-
-  guint32 n_key_point_sets;
-  MXFUUID *key_point_sets_uids;
-  MXFDMS1KeyPoint **key_point_sets;
-};
-
-struct _MXFDMS1KeyPoint {
-  MXFDMS1Thesaurus parent;
-
-  gchar *keypoint_kind;
-  gchar *keypoint_value;
-  gint64 keypoint_position;
-};
-
-struct _MXFDMS1Participant {
-  MXFDMS1Thesaurus parent;
-
-  MXFUUID participant_uid;
-
-  gchar *contribution_status;
-  gchar *job_function;
-  gchar job_function_code[33];
-  gchar *role_or_identity_name;
-
-  guint32 n_person_sets;
-  MXFUUID *person_sets_uids;
-  MXFDMS1Person **person_sets;
-
-  guint32 n_organisation_sets;
-  MXFUUID *organisation_sets_uids;
-  MXFDMS1Organisation **organisation_sets;
-};
-
-struct _MXFDMS1Contact {
-  MXFDMS1Thesaurus parent;
-
-  MXFUUID contact_uid;
-
-  guint32 n_name_value_sets;
-  MXFUUID *name_value_sets_uids;
-  MXFDMS1NameValue **name_value_sets;
-
-  guint32 n_address_sets;
-  MXFUUID *address_sets_uids;
-  MXFDMS1Address **address_sets;
-};
-
-struct _MXFDMS1Person {
-  MXFDMS1Contact parent;
-
-  gchar *family_name;
-  gchar *first_given_name;
-  gchar *other_given_names;
-  gchar *linking_name;
-  gchar *salutation;
-  gchar *name_suffix;
-  gchar *honours_qualifications;
-  gchar *former_family_name;
-  gchar *person_description;
-  gchar *alternate_name;
-  gchar *nationality;
-  gchar *citizenship;
-
-  guint32 n_organisation_sets;
-  MXFUUID *organisation_sets_uids;
-  MXFDMS1Organisation **organisation_sets;
-};
-
-struct _MXFDMS1Organisation {
-  MXFDMS1Contact parent;
-
-  gchar *nature_of_organisation;
-  gchar *organisation_main_name;
-  gchar *organisation_code;
-  gchar *contact_department;
-};
-
-struct _MXFDMS1Location {
-  MXFDMS1Contact parent;
-
-  gchar *location_kind;
-  gchar *location_description;
-};
-
-struct _MXFDMS1Address {
-  MXFDMS1 parent;
-  
-  gchar *room_or_suite_number;
-  gchar *room_or_suite_name;
-  gchar *building_name;
-  gchar *place_name;
-  gchar *street_number;
-  gchar *street_name;
-  gchar *postal_town;
-  gchar *city;
-  gchar *state_or_province_or_country;
-  gchar *postal_code;
-  gchar *country;
-  guint8 geographical_coordinate[12];
-  gchar *astronomical_body_name;
-
-  guint32 n_communications_sets;
-  MXFUUID *communications_sets_uids;
-  MXFDMS1Communications **communications_sets;
-
-  guint32 n_name_value_sets;
-  MXFUUID *name_value_sets_uids;
-  MXFDMS1NameValue **name_value_sets;
-};
-
-struct _MXFDMS1Communications {
-  MXFDMS1 parent;
-
-  gchar central_telephone_number[33];
-  gchar telephone_number[33];
-  gchar mobile_telephone_number[33];
-  gchar fax_number[33];
-  gchar *email_address;
-  gchar *web_page;
-};
-
-struct _MXFDMS1Contract {
-  MXFDMS1Thesaurus parent;
-
-  gchar supply_contract_number[33];
-
-  guint32 n_rights_sets;
-  MXFUUID *rights_sets_uids;
-  MXFDMS1Rights **rights_sets;
-
-  guint32 n_participant_sets;
-  MXFUUID *participant_sets_uids;
-  MXFDMS1Participant **participant_sets;
-};
-
-struct _MXFDMS1Rights {
-  MXFDMS1Thesaurus parent;
-
-  gchar *copyright_owner;
-  gchar *rights_holder;
-  gchar *rights_managment_authority;
-  gchar *region_or_area_of_ip_license;
-  gchar *intellectual_property_type;
-  gchar *right_condition;
-  gchar *right_remarks;
-  gchar *intellectual_property_right;
-  MXFTimestamp rights_start_date_and_time;
-  MXFTimestamp rights_stop_date_and_time;
-  guint16 maximum_number_of_usages;
-};
-
-struct _MXFDMS1PictureFormat {
-  MXFDMS1 parent;
-
-  MXFFraction viewport_aspect_ratio;
-  gchar perceived_display_format[33];
-  gchar *colour_descriptor;
-};
-
-struct _MXFDMS1DeviceParameters {
-  MXFDMS1Thesaurus parent;
-
-  gchar *device_type;
-  gchar device_designation[33];
-  gchar device_asset_number[33];
-  guint8 ieee_device_identifier[6];
-  gchar *manufacturer;
-  gchar *device_model;
-  gchar *device_serial_number;
-  gchar *device_usage_description;
-
-  guint32 n_name_value_sets;
-  MXFUUID *name_value_sets_uids;
-  MXFDMS1NameValue **name_value_sets;
-};
-
-struct _MXFDMS1NameValue {
-  MXFDMS1 parent;
-
-  gchar *item_name;
-  gchar *item_value;
-
-  MXFUUID smpte_universal_label_locator;
-};
-
-struct _MXFDMS1Processing {
-  MXFDMS1 parent;
-
-  gboolean quality_flag;
-  gchar *descriptive_comment;
-  gboolean logo_flag;
-  gchar *graphic_usage_type;
-  guint16 process_steps;
-  guint16 generation_copy_number;
-  guint16 generation_clone_number;
-};
-
-struct _MXFDMS1Project {
-  MXFDMS1 parent;
-
-  gchar project_number[33];
-  gchar *project_name_or_title;
-};
-
-struct _MXFDMS1ContactsList {
-  MXFDMS1 parent;
-
-  guint32 n_person_sets;
-  MXFUUID *person_sets_uids;
-  MXFDMS1Person **person_sets;
-
-  guint32 n_organisation_sets;
-  MXFUUID *organisation_sets_uids;
-  MXFDMS1Organisation **organisation_sets;
-
-  guint32 n_location_sets;
-  MXFUUID *location_sets_uids;
-  MXFDMS1Location **location_sets;
-};
-
-struct _MXFDMS1CueWords {
-  MXFDMS1TextLanguage parent;
-
-  gchar *in_cue_words;
-  gchar *out_cue_words;
-};
-
-void mxf_dms1_initialize (void);
-
-#endif /* _MXF_DMS1_H_ */
diff --git a/gst/mxf/mxfmetadata.c b/gst/mxf/mxfmetadata.c
index 69aadb5..0fbc11e 100644
--- a/gst/mxf/mxfmetadata.c
+++ b/gst/mxf/mxfmetadata.c
@@ -149,9 +149,13 @@
   const guint8 *tag_data;
 
   g_return_val_if_fail (MXF_IS_METADATA_BASE (self), FALSE);
-  g_return_val_if_fail (data != NULL, FALSE);
   g_return_val_if_fail (primer != NULL, FALSE);
 
+  if (size == 0)
+    return FALSE;
+
+  g_return_val_if_fail (data != NULL, FALSE);
+
   while (mxf_local_tag_parse (data, size, &tag, &tag_size, &tag_data)) {
     if (tag_size == 0 || tag == 0x0000)
       goto next;
@@ -2244,6 +2248,9 @@
   d = MXF_METADATA_FILE_DESCRIPTOR (current);
 
   for (i = 0; i < package->n_tracks; i++) {
+    if (!package->tracks[i])
+      continue;
+
     if (!MXF_IS_METADATA_MULTIPLE_DESCRIPTOR (d)) {
       if (d->linked_track_id == package->tracks[i]->track_id ||
           (d->linked_track_id == 0 && package->n_essence_tracks == 1 &&
@@ -3552,12 +3559,12 @@
       if (GST_READ_UINT32_BE (tag_data + 4) != 4)
         goto error;
 
-      if (tag_size < 8 + 4 * len)
-        goto error;
-
       tag_data += 8;
       tag_size -= 8;
 
+      if (tag_size / 4 < len)
+        goto error;
+
       self->n_track_ids = len;
       self->track_ids = g_new0 (guint32, len);
 
@@ -3725,7 +3732,10 @@
       if (GST_READ_UINT32_BE (tag_data + 4) != 4)
         goto error;
 
-      if (len * 4 + 8 < tag_size)
+      tag_data += 8;
+      tag_size -= 8;
+
+      if (len < tag_size / 4)
         goto error;
 
       self->n_track_ids = len;
@@ -6493,7 +6503,7 @@
     return NULL;
   }
 
-  for (i = 0; i < _dm_schemes->len; i++) {
+  for (i = 0; _dm_schemes && i < _dm_schemes->len; i++) {
     _MXFDescriptiveMetadataScheme *data =
         &g_array_index (_dm_schemes, _MXFDescriptiveMetadataScheme, i);
 
diff --git a/gst/mxf/mxftypes.c b/gst/mxf/mxftypes.c
index 14e2362..ba7704b 100644
--- a/gst/mxf/mxftypes.c
+++ b/gst/mxf/mxftypes.c
@@ -326,11 +326,12 @@
 
   g_return_val_if_fail (array != NULL, FALSE);
   g_return_val_if_fail (count != NULL, FALSE);
-  g_return_val_if_fail (data != NULL, FALSE);
 
   if (size < 8)
     return FALSE;
 
+  g_return_val_if_fail (data != NULL, FALSE);
+
   element_count = GST_READ_UINT32_BE (data);
   data += 4;
   size -= 4;
@@ -351,7 +352,7 @@
     return FALSE;
   }
 
-  if (16 * element_count < size) {
+  if (element_count > size / 16) {
     *array = NULL;
     *count = 0;
     return FALSE;
@@ -492,7 +493,6 @@
 gboolean
 mxf_timestamp_parse (MXFTimestamp * timestamp, const guint8 * data, guint size)
 {
-  g_return_val_if_fail (data != NULL, FALSE);
   g_return_val_if_fail (timestamp != NULL, FALSE);
 
   memset (timestamp, 0, sizeof (MXFTimestamp));
@@ -500,6 +500,8 @@
   if (size < 8)
     return FALSE;
 
+  g_return_val_if_fail (data != NULL, FALSE);
+
   timestamp->year = GST_READ_UINT16_BE (data);
   timestamp->month = GST_READ_UINT8 (data + 2);
   timestamp->day = GST_READ_UINT8 (data + 3);
@@ -597,13 +599,14 @@
 mxf_fraction_parse (MXFFraction * fraction, const guint8 * data, guint size)
 {
   g_return_val_if_fail (fraction != NULL, FALSE);
-  g_return_val_if_fail (data != NULL, FALSE);
 
   memset (fraction, 0, sizeof (MXFFraction));
 
   if (size < 8)
     return FALSE;
 
+  g_return_val_if_fail (data != NULL, FALSE);
+
   fraction->n = GST_READ_UINT32_BE (data);
   fraction->d = GST_READ_UINT32_BE (data + 4);
 
@@ -669,13 +672,14 @@
     const guint8 * data, guint size)
 {
   g_return_val_if_fail (product_version != NULL, FALSE);
-  g_return_val_if_fail (data != NULL, FALSE);
 
   memset (product_version, 0, sizeof (MXFProductVersion));
 
   if (size < 9)
     return FALSE;
 
+  g_return_val_if_fail (data != NULL, FALSE);
+
   product_version->major = GST_READ_UINT16_BE (data);
   product_version->minor = GST_READ_UINT16_BE (data + 2);
   product_version->patch = GST_READ_UINT16_BE (data + 4);
@@ -769,8 +773,10 @@
   gchar str[48];
 #endif
 
+  if (size < 84)
+    return FALSE;
+
   g_return_val_if_fail (data != NULL, FALSE);
-  g_return_val_if_fail (size >= 84, FALSE);
 
   memset (pack, 0, sizeof (MXFPartitionPack));
 
@@ -991,12 +997,13 @@
   guint len, i;
   MXFRandomIndexPackEntry entry;
 
-  g_return_val_if_fail (data != NULL, FALSE);
   g_return_val_if_fail (array != NULL, FALSE);
 
   if (size < 4)
     return FALSE;
 
+  g_return_val_if_fail (data != NULL, FALSE);
+
   if ((size - 4) % 12 != 0)
     return FALSE;
 
@@ -1072,13 +1079,14 @@
   const guint8 *tag_data;
 
   g_return_val_if_fail (ul != NULL, FALSE);
-  g_return_val_if_fail (data != NULL, FALSE);
 
   memset (segment, 0, sizeof (MXFIndexTableSegment));
 
   if (size < 70)
     return FALSE;
 
+  g_return_val_if_fail (data != NULL, FALSE);
+
   GST_DEBUG ("Parsing index table segment:");
 
   while (mxf_local_tag_parse (data, size, &tag, &tag_size, &tag_data)) {
@@ -1167,7 +1175,7 @@
         tag_data += 4;
         tag_size -= 4;
 
-        if (tag_size < len * 6)
+        if (tag_size / 6 < len)
           goto error;
 
         segment->delta_entries = g_new (MXFDeltaEntry, len);
@@ -1216,7 +1224,8 @@
         tag_data += 4;
         tag_size -= 4;
 
-        if (tag_size < len * 11)
+        if (tag_size / (11 + 4 * segment->slice_count +
+                8 * segment->pos_table_count) < len)
           goto error;
 
         segment->index_entries = g_new0 (MXFIndexEntry, len);
@@ -1289,9 +1298,11 @@
 
   g_return_if_fail (segment != NULL);
 
-  for (i = 0; i < segment->n_index_entries; i++) {
-    g_free (segment->index_entries[i].slice_offset);
-    g_free (segment->index_entries[i].pos_table);
+  if (segment->index_entries) {
+    for (i = 0; i < segment->n_index_entries; i++) {
+      g_free (segment->index_entries[i].slice_offset);
+      g_free (segment->index_entries[i].pos_table);
+    }
   }
 
   g_free (segment->index_entries);
@@ -1434,8 +1445,10 @@
   guint i;
   guint32 n;
 
+  if (size < 8)
+    return FALSE;
+
   g_return_val_if_fail (data != NULL, FALSE);
-  g_return_val_if_fail (size >= 8, FALSE);
 
   memset (pack, 0, sizeof (MXFPrimerPack));
 
@@ -1447,14 +1460,16 @@
 
   n = GST_READ_UINT32_BE (data);
   data += 4;
+  size -= 4;
 
   GST_DEBUG ("  number of mappings = %u", n);
 
   if (GST_READ_UINT32_BE (data) != 18)
     goto error;
   data += 4;
+  size -= 4;
 
-  if (size < 8 + n * 18)
+  if (size / 18 < n)
     goto error;
 
   for (i = 0; i < n; i++) {
@@ -1610,18 +1625,21 @@
 mxf_local_tag_parse (const guint8 * data, guint size, guint16 * tag,
     guint16 * tag_size, const guint8 ** tag_data)
 {
-  g_return_val_if_fail (data != NULL, FALSE);
-
   if (size < 4)
     return FALSE;
 
+  g_return_val_if_fail (data != NULL, FALSE);
+
   *tag = GST_READ_UINT16_BE (data);
   *tag_size = GST_READ_UINT16_BE (data + 2);
 
-  if (size < 4 + *tag_size)
+  data += 4;
+  size -= 4;
+
+  if (size < *tag_size)
     return FALSE;
 
-  *tag_data = data + 4;
+  *tag_data = data;
 
   return TRUE;
 }
@@ -1645,7 +1663,7 @@
   MXFUL *ul;
 
   g_return_val_if_fail (primer != NULL, FALSE);
-  g_return_val_if_fail (tag_data != NULL, FALSE);
+  g_return_val_if_fail (tag_size == 0 || tag_data != NULL, FALSE);
   g_return_val_if_fail (hash_table != NULL, FALSE);
   g_return_val_if_fail (primer->mappings != NULL, FALSE);
 
@@ -1671,7 +1689,7 @@
     local_tag = g_slice_new0 (MXFLocalTag);
     memcpy (&local_tag->ul, ul, sizeof (MXFUL));
     local_tag->size = tag_size;
-    local_tag->data = g_memdup (tag_data, tag_size);
+    local_tag->data = tag_size == 0 ? NULL : g_memdup (tag_data, tag_size);
     local_tag->g_slice = FALSE;
 
     g_hash_table_insert (*hash_table, &local_tag->ul, local_tag);
diff --git a/gst/mxf/mxful.c b/gst/mxf/mxful.c
index 3d186f9..75829c6 100644
--- a/gst/mxf/mxful.c
+++ b/gst/mxf/mxful.c
@@ -616,11 +616,12 @@
 
   g_return_val_if_fail (array != NULL, FALSE);
   g_return_val_if_fail (count != NULL, FALSE);
-  g_return_val_if_fail (data != NULL, FALSE);
 
   if (size < 8)
     return FALSE;
 
+  g_return_val_if_fail (data != NULL, FALSE);
+
   element_count = GST_READ_UINT32_BE (data);
   data += 4;
   size -= 4;
@@ -641,7 +642,7 @@
     return FALSE;
   }
 
-  if (16 * element_count < size) {
+  if (element_count > size / 16) {
     *array = NULL;
     *count = 0;
     return FALSE;
diff --git a/gst/rawparse/gstrawaudioparse.c b/gst/rawparse/gstrawaudioparse.c
index 98575dd..626604c 100644
--- a/gst/rawparse/gstrawaudioparse.c
+++ b/gst/rawparse/gstrawaudioparse.c
@@ -161,6 +161,8 @@
 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 gint gst_raw_audio_parse_get_alignment (GstRawBaseParse * raw_base_parse,
+    GstRawBaseParseConfig config);
 
 static gboolean gst_raw_audio_parse_is_using_sink_caps (GstRawAudioParse *
     raw_audio_parse);
@@ -228,6 +230,8 @@
       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);
+  rawbaseparse_class->get_alignment =
+      GST_DEBUG_FUNCPTR (gst_raw_audio_parse_get_alignment);
 
   g_object_class_install_property (object_class,
       PROP_FORMAT,
@@ -669,6 +673,38 @@
   return gst_raw_audio_parse_get_config_ptr (raw_audio_parse, config)->ready;
 }
 
+static guint
+round_up_pow2 (guint n)
+{
+  n = n - 1;
+  n = n | (n >> 1);
+  n = n | (n >> 2);
+  n = n | (n >> 4);
+  n = n | (n >> 8);
+  n = n | (n >> 16);
+  return n + 1;
+}
+
+static gint
+gst_raw_audio_parse_get_alignment (GstRawBaseParse * raw_base_parse,
+    GstRawBaseParseConfig config)
+{
+  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);
+  gint width;
+
+  if (config_ptr->format != GST_RAW_AUDIO_PARSE_FORMAT_PCM)
+    return 1;
+
+  width =
+      GST_AUDIO_FORMAT_INFO_WIDTH (gst_audio_format_get_info
+      (config_ptr->pcm_format)) / 8;
+  width = GST_ROUND_UP_8 (width);
+  width = round_up_pow2 (width);
+
+  return width;
+}
 
 static gboolean
 gst_raw_audio_parse_process (GstRawBaseParse * raw_base_parse,
diff --git a/gst/rawparse/gstrawbaseparse.c b/gst/rawparse/gstrawbaseparse.c
index c2ccee5..5fb8e73 100644
--- a/gst/rawparse/gstrawbaseparse.c
+++ b/gst/rawparse/gstrawbaseparse.c
@@ -430,6 +430,43 @@
   return ret;
 }
 
+static GstBuffer *
+gst_raw_base_parse_align_buffer (GstRawBaseParse * raw_base_parse,
+    gsize alignment, GstBuffer * buffer, gsize out_size)
+{
+  GstMapInfo map;
+
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+
+  if (map.size < sizeof (guintptr)) {
+    gst_buffer_unmap (buffer, &map);
+    return NULL;
+  }
+
+  if (((guintptr) map.data) & (alignment - 1)) {
+    GstBuffer *new_buffer;
+    GstAllocationParams params = { 0, alignment - 1, 0, 0, };
+
+    new_buffer = gst_buffer_new_allocate (NULL, out_size, &params);
+
+    /* Copy data "by hand", so ensure alignment is kept: */
+    gst_buffer_fill (new_buffer, 0, map.data, out_size);
+
+    gst_buffer_copy_into (new_buffer, buffer, GST_BUFFER_COPY_METADATA, 0,
+        out_size);
+    GST_DEBUG_OBJECT (raw_base_parse,
+        "We want output aligned on %" G_GSIZE_FORMAT ", reallocated",
+        alignment);
+
+    gst_buffer_unmap (buffer, &map);
+
+    return new_buffer;
+  }
+
+  gst_buffer_unmap (buffer, &map);
+
+  return NULL;
+}
 
 static GstFlowReturn
 gst_raw_base_parse_handle_frame (GstBaseParse * parse,
@@ -442,6 +479,7 @@
   guint64 buffer_duration;
   GstFlowReturn flow_ret = GST_FLOW_OK;
   GstEvent *new_caps_event = NULL;
+  gint alignment;
   GstRawBaseParse *raw_base_parse = GST_RAW_BASE_PARSE (parse);
   GstRawBaseParseClass *klass = GST_RAW_BASE_PARSE_GET_CLASS (parse);
 
@@ -567,6 +605,23 @@
     frame->out_buffer = NULL;
   }
 
+  if (klass->get_alignment
+      && (alignment =
+          klass->get_alignment (raw_base_parse,
+              GST_RAW_BASE_PARSE_CONFIG_CURRENT)) != 1) {
+    GstBuffer *aligned_buffer;
+
+    aligned_buffer =
+        gst_raw_base_parse_align_buffer (raw_base_parse, alignment,
+        frame->out_buffer ? frame->out_buffer : frame->buffer, out_size);
+
+    if (aligned_buffer) {
+      if (frame->out_buffer)
+        gst_buffer_unref (frame->out_buffer);
+      frame->out_buffer = aligned_buffer;
+    }
+  }
+
   /* 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.
diff --git a/gst/rawparse/gstrawbaseparse.h b/gst/rawparse/gstrawbaseparse.h
index 519b409..4af4408 100644
--- a/gst/rawparse/gstrawbaseparse.h
+++ b/gst/rawparse/gstrawbaseparse.h
@@ -193,6 +193,9 @@
 
   gint                  (*get_overhead_size)         (GstRawBaseParse * raw_base_parse,
                                                       GstRawBaseParseConfig config);
+
+  gint                  (*get_alignment)             (GstRawBaseParse * raw_base_parse,
+                                                      GstRawBaseParseConfig config);
 };
 
 
diff --git a/gst/rawparse/gstrawvideoparse.c b/gst/rawparse/gstrawvideoparse.c
index 2fb58c1..3808369 100644
--- a/gst/rawparse/gstrawvideoparse.c
+++ b/gst/rawparse/gstrawvideoparse.c
@@ -182,11 +182,12 @@
     * gst_raw_video_parse_get_config_ptr (GstRawVideoParse * raw_video_parse,
     GstRawBaseParseConfig config);
 
+static gint gst_raw_video_parse_get_alignment (GstRawBaseParse * raw_base_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)
 {
@@ -236,6 +237,8 @@
       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);
+  rawbaseparse_class->get_alignment =
+      GST_DEBUG_FUNCPTR (gst_raw_video_parse_get_alignment);
 
   g_object_class_install_property (object_class,
       PROP_WIDTH,
@@ -929,6 +932,12 @@
   return gst_raw_video_parse_get_config_ptr (raw_video_parse, config)->ready;
 }
 
+static gint
+gst_raw_video_parse_get_alignment (GstRawBaseParse * raw_base_parse,
+    GstRawBaseParseConfig config)
+{
+  return 32;
+}
 
 static gboolean
 gst_raw_video_parse_process (GstRawBaseParse * raw_base_parse,
diff --git a/gst/timecode/gsttimecodestamper.c b/gst/timecode/gsttimecodestamper.c
index d930289..4cbdc68 100644
--- a/gst/timecode/gsttimecodestamper.c
+++ b/gst/timecode/gsttimecodestamper.c
@@ -341,6 +341,16 @@
   return ret;
 }
 
+static gboolean
+remove_timecode_meta (GstBuffer * buffer, GstMeta ** meta, gpointer user_data)
+{
+  if (meta && *meta && (*meta)->info->api == GST_VIDEO_TIME_CODE_META_API_TYPE) {
+    *meta = NULL;
+  }
+
+  return TRUE;
+}
+
 static GstFlowReturn
 gst_timecodestamper_transform_ip (GstBaseTransform * vfilter,
     GstBuffer * buffer)
@@ -350,10 +360,13 @@
 
   GST_OBJECT_LOCK (timecodestamper);
   if (gst_buffer_get_video_time_code_meta (buffer)
-      && timecodestamper->override_existing == FALSE) {
+      && !timecodestamper->override_existing) {
     GST_OBJECT_UNLOCK (timecodestamper);
     return GST_FLOW_OK;
+  } else if (timecodestamper->override_existing) {
+    gst_buffer_foreach_meta (buffer, remove_timecode_meta, NULL);
   }
+
   if (timecodestamper->source_clock != NULL) {
     if (timecodestamper->current_tc->hours == 0
         && timecodestamper->current_tc->minutes == 0
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index be2f462..3153c2b 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -1131,8 +1131,10 @@
         goto skip;
         break;
       default:
-        g_assert_not_reached ();
-        break;
+        /* should not really occur either */
+        GST_ELEMENT_ERROR (h264parse, STREAM, FORMAT,
+            ("Error parsing H.264 stream"), ("Invalid H.264 stream"));
+        goto invalid_stream;
     }
   }
 
@@ -1829,8 +1831,8 @@
       /* Pass through or set output stereo/multiview config */
       if (s && gst_structure_has_field (s, "multiview-mode")) {
         caps_mview_mode = gst_structure_get_string (s, "multiview-mode");
-        gst_structure_get_flagset (s, "multiview-flags", (guint*) &mview_flags,
-            NULL);
+        gst_structure_get_flagset (s, "multiview-flags",
+            (guint *) & mview_flags, NULL);
       } else if (mview_mode != GST_VIDEO_MULTIVIEW_MODE_NONE) {
         if (gst_video_multiview_guess_half_aspect (mview_mode,
                 width, height, par_n, par_d)) {
@@ -2583,6 +2585,10 @@
       off = nalu.offset + nalu.size;
     }
 
+    if (off >= size) {
+      gst_buffer_unmap (codec_data, &map);
+      goto avcc_too_small;
+    }
     num_pps = data[off];
     off++;
 
diff --git a/gst/videoparsers/gsth265parse.c b/gst/videoparsers/gsth265parse.c
index 68fbe8d..f965a4b 100644
--- a/gst/videoparsers/gsth265parse.c
+++ b/gst/videoparsers/gsth265parse.c
@@ -883,8 +883,10 @@
         *skipsize = size - 3;
         goto skip;
       default:
-        g_assert_not_reached ();
-        break;
+        /* should not really occur either */
+        GST_ELEMENT_ERROR (h265parse, STREAM, FORMAT,
+            ("Error parsing H.265 stream"), ("Invalid H.265 stream"));
+        goto invalid_stream;
     }
   }
 
@@ -2016,6 +2018,7 @@
       (value = gst_structure_get_value (str, "codec_data"))) {
     GstMapInfo map;
     guint8 *data;
+    guint num_nal_arrays;
 
     GST_DEBUG_OBJECT (h265parse, "have packetized h265");
     /* make note for optional split processing */
@@ -2044,8 +2047,15 @@
     GST_DEBUG_OBJECT (h265parse, "nal length size %u",
         h265parse->nal_length_size);
 
+    num_nal_arrays = data[22];
     off = 23;
-    for (i = 0; i < data[22]; i++) {
+
+    for (i = 0; i < num_nal_arrays; i++) {
+      if (off + 3 >= size) {
+        gst_buffer_unmap (codec_data, &map);
+        goto hvcc_too_small;
+      }
+
       num_nals = GST_READ_UINT16_BE (data + off + 1);
       off += 3;
       for (j = 0; j < num_nals; j++) {
diff --git a/po/af.gmo b/po/af.gmo
index 714f8f3..72c32a8 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 4037d42..0e16b39 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2004-03-18 14:16+0200\n"
 "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
 "Language-Team: Afrikaans <i18n@af.org.za>\n"
diff --git a/po/az.gmo b/po/az.gmo
index 6da931a..f6c9536 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index cf4eb2d..32f7c2b 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2004-03-19 18:29+0200\n"
 "Last-Translator: Metin Amiroff <metin@karegen.com>\n"
 "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
diff --git a/po/bg.gmo b/po/bg.gmo
index 744e2c9..49ec4c6 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 5fab88a..b4487eb 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\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"
diff --git a/po/ca.gmo b/po/ca.gmo
index 1e58437..bca5133 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 35620af..ccda1cb 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2012-01-01 14:19+0100\n"
 "Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
diff --git a/po/cs.gmo b/po/cs.gmo
index 2afbb6d..850e58b 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 20f6976..77ab332 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\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"
diff --git a/po/da.gmo b/po/da.gmo
index 70e6ccd..d24ab54 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 01a70e1..bd90d18 100644
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad-1.10.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2016-11-03 11:28+0200\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
diff --git a/po/de.gmo b/po/de.gmo
index dab42d0..585f773 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 6057d4b..d068781 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.10.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2016-11-02 19:18+0100\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
diff --git a/po/el.gmo b/po/el.gmo
index 19e1623..22097b4 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 708874b..6f248c4 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2012-05-05 19:17+0100\n"
 "Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index fa5a4e6..7d0abe1 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 326b081..8341e78 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2004-04-26 10:41-0400\n"
 "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
 "Language-Team: English (British) <en_gb@li.org>\n"
diff --git a/po/eo.gmo b/po/eo.gmo
index 436db6e..303ce32 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index eb66941..21ce85c 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2011-06-04 22:18+0200\n"
 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
diff --git a/po/es.gmo b/po/es.gmo
index 6cb202a..d08d44a 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index ce65055..d192f14 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2011-10-02 15:47+0200\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
diff --git a/po/eu.gmo b/po/eu.gmo
index 1292bda..ed6c2e7 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 0c7801f..5efc36c 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2010-03-25 12:30+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
diff --git a/po/fi.gmo b/po/fi.gmo
index 907ce9f..f64759f 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index d949447..ec41403 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2009-08-12 22:13+0300\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
diff --git a/po/fr.gmo b/po/fr.gmo
index ecdebbc..5ff6255 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 8873911..95790c5 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\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"
diff --git a/po/gl.gmo b/po/gl.gmo
index 21bb47b..aaceaa9 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index ef006b4..0fc6cb5 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2011-09-05 12:50+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
diff --git a/po/gst-plugins-bad-1.0.pot b/po/gst-plugins-bad-1.0.pot
index edf7499..ee78a91 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.10.1\n"
+"Project-Id-Version: gst-plugins-bad 1.10.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/po/hr.gmo b/po/hr.gmo
index 3f8bf43..a6d89ab 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 7b221a8..3192a86 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -5,25 +5,26 @@
 # Božidar Putanec <bozidarp@yahoo.com>, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-bad 1.7.2\n"
+"Project-Id-Version: gst-plugins-bad-1.10.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-17 15:03+0200\n"
-"PO-Revision-Date: 2016-05-27 12:45-0700\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
+"PO-Revision-Date: 2016-11-19 10:21-0800\n"
 "Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
 "Language: hr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
-"X-Generator: Lokalize 2.0\n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Poedit 1.8.7.1\n"
 
 msgid "failed to draw pattern"
-msgstr ""
+msgstr "crtanje uzorka nije uspjelo"
 
 msgid "A GL error occured"
-msgstr ""
+msgstr "Dogodila se GL greška"
 
 msgid "format wasn't negotiated before get function"
 msgstr "format nije bio dogovoren prije ‘get’ funkcije"
@@ -133,33 +134,31 @@
 msgid "Could not open file \"%s\" for reading."
 msgstr "Datoteku „%s“ nije moguće otvoriti za čitanje."
 
-#, fuzzy
 msgid "Couldn't find channel configuration file"
-msgstr "Konfiguracijsku datoteku za DVB kanal nije moguće pronaći"
+msgstr "Konfiguracijska datoteka kanala nije pronađena"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't load channel configuration file: '%s'"
-msgstr "Nije moguće učitati konfiguracijsku datoteku za DVB kanal: %s"
+msgstr "Neuspjeh pri učitavanju konfiguracijske datoteke kanala: ‘%s’"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't find details for channel '%s'"
-msgstr "Pojedinosti za DVB kanal %s nije moguće pronaći"
+msgstr "Pojedinosti za kanal ‘%s’ nisu nađene"
 
-#, fuzzy, c-format
+#, c-format
 msgid "No properties for channel '%s'"
-msgstr "Pojedinosti za DVB kanal %s nije moguće pronaći"
+msgstr "Svojstva za kanal ‘%s’ nisu nađena"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to set properties for channel '%s'"
-msgstr "Pojedinosti za DVB kanal %s nije moguće pronaći"
+msgstr "Nije uspjelo postaviti svojstva za kanal ‘%s’"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Couldn't find channel configuration file: '%s'"
-msgstr "Konfiguracijsku datoteku za DVB kanal nije moguće pronaći"
+msgstr "Nije nađena konfiguracijska datoteka kanala: ‘%s’"
 
-#, fuzzy
 msgid "Channel configuration file doesn't contain any channels"
-msgstr "Konfiguracijska datoteka za DVB kanal ne sadrži nijedan kanal"
+msgstr "Konfiguracijska datoteka za kanala ne sadrži niti jedan kanal"
 
 #~ msgid "Internal data flow error."
 #~ msgstr "Interna greška u protoku podataka."
diff --git a/po/hu.gmo b/po/hu.gmo
index 857ff48..5388a47 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 00e8286..1f14bde 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\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"
diff --git a/po/id.gmo b/po/id.gmo
index 03b1840..1ad98ee 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index bb2421a..5c3a840 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.10.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2016-11-14 20:38+0700\n"
 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
diff --git a/po/it.gmo b/po/it.gmo
index 06ff45f..fd78ab7 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 3292328..0c3b1a0 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2009-08-14 00:12+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
diff --git a/po/ja.gmo b/po/ja.gmo
index 514dbe0..22f7a8d 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 3db9285..3116b0d 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2011-04-26 19:38+0900\n"
 "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
diff --git a/po/ky.gmo b/po/ky.gmo
index 2d2795c..a6a56d2 100644
--- a/po/ky.gmo
+++ b/po/ky.gmo
Binary files differ
diff --git a/po/ky.po b/po/ky.po
index d7d69f0..cb7c08d 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2007-11-13 17:16+0600\n"
 "Last-Translator: Ilyas Bakirov <just_ilyas@yahoo.com>\n"
 "Language-Team: Kirghiz <i18n-team-ky-kyrgyz@lists.sourceforge.net>\n"
diff --git a/po/lt.gmo b/po/lt.gmo
index d9c1114..2c498c8 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 96da4e8..e7612b3 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2008-05-14 02:13+0300\n"
 "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
diff --git a/po/lv.gmo b/po/lv.gmo
index 98bd1b6..87753e0 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index aafa98b..1b850d8 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2014-04-20 15:52+0300\n"
 "Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
 "Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
diff --git a/po/mt.gmo b/po/mt.gmo
index a22b914..00d8da8 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index ffa22b4..16fe0a6 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2008-10-26 20:27+0100\n"
 "Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
 "Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
diff --git a/po/nb.gmo b/po/nb.gmo
index b519c79..ca1218a 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index f237fc3..6cd5dee 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\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"
diff --git a/po/nl.gmo b/po/nl.gmo
index 2d04fe5..a381044 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 2d69729..a400221 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\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"
diff --git a/po/or.gmo b/po/or.gmo
index f96f0a8..76af1dd 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 688a4b5..eba41b1 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2004-09-27 13:32+0530\n"
 "Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
 "Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
diff --git a/po/pl.gmo b/po/pl.gmo
index f2bb40d..e55d27f 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index a4cbe6f..357dc5e 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.10.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2016-11-01 20:53+0100\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index b97dbb9..067d978 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 bb1c130..d510617 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\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."
diff --git a/po/ro.gmo b/po/ro.gmo
index 49deece..5c6ab53 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 7410caf..8486783 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2010-08-16 03:11+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
diff --git a/po/ru.gmo b/po/ru.gmo
index 3cf96bd..dcd4387 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 54b7bca..78dfbb1 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.10.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2016-11-02 21:21+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
diff --git a/po/sk.gmo b/po/sk.gmo
index 49248ed..0b8c3f7 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 4f86f86..27358de 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\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"
diff --git a/po/sl.gmo b/po/sl.gmo
index 6d766ad..abf5726 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 56533d7..c5d8077 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2011-04-26 15:21+0100\n"
 "Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
diff --git a/po/sq.gmo b/po/sq.gmo
index ee00767..27cc06f 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index 988c7e8..e391aff 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2008-08-15 16:07+0200\n"
 "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
 "Language-Team: Albanian <translation-team-sq@lists.sourceforge.net>\n"
diff --git a/po/sr.gmo b/po/sr.gmo
index 2553349..24c40d4 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 487f409..b71d324 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2015-12-24 11:34+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index b48ff05..9cc0a61 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 693f7b8..7f92daf 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\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"
diff --git a/po/tr.gmo b/po/tr.gmo
index 7306974..bd87b74 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 33781e3..06cff2f 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-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2015-01-10 21:07+0100\n"
 "Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
diff --git a/po/uk.gmo b/po/uk.gmo
index b0ec640..3eaa54d 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index d088181..db819b3 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.10.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2016-11-01 20:55+0200\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
diff --git a/po/vi.gmo b/po/vi.gmo
index 5fb1f7e..2ae17b5 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index cd187a7..f93b6d2 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.10.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2016-11-02 13:38+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index e38d4fa..eb0db0c 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 4d395a3..18f39db 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.10.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-17 15:03+0200\n"
+"POT-Creation-Date: 2016-11-29 15:49+0200\n"
 "PO-Revision-Date: 2016-11-02 13:41+0800\n"
 "Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
diff --git a/sys/decklink/gstdecklink.cpp b/sys/decklink/gstdecklink.cpp
index 184f124..8596337 100644
--- a/sys/decklink/gstdecklink.cpp
+++ b/sys/decklink/gstdecklink.cpp
@@ -194,8 +194,8 @@
 
 #define NTSC 10, 11, false, "bt601"
 #define PAL 12, 11, true, "bt601"
-#define HD 1, 1, false, "bt709"
-#define UHD 1, 1, false, "bt2020"
+#define HD 1, 1, true, "bt709"
+#define UHD 1, 1, true, "bt2020"
 
 static const GstDecklinkMode modes[] = {
   {bmdModeNTSC, 720, 486, 30000, 1001, true, NTSC},     // default is ntsc
@@ -467,7 +467,7 @@
 }
 
 static GstStructure *
-gst_decklink_mode_get_structure (GstDecklinkModeEnum e, BMDPixelFormat f)
+gst_decklink_mode_get_structure (GstDecklinkModeEnum e, BMDPixelFormat f, gboolean input)
 {
   const GstDecklinkMode *mode = &modes[e];
   GstStructure *s = gst_structure_new ("video/x-raw",
@@ -478,6 +478,13 @@
       mode->interlaced ? "interleaved" : "progressive",
       "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, NULL);
 
+  if (input && mode->interlaced) {
+    if (mode->tff)
+      gst_structure_set (s, "field-order", G_TYPE_STRING, "top-field-first", NULL);
+    else
+      gst_structure_set (s, "field-order", G_TYPE_STRING, "bottom-field-first", NULL);
+  }
+
   switch (f) {
     case bmdFormat8BitYUV:     /* '2vuy' */
       gst_structure_set (s, "format", G_TYPE_STRING, "UYVY",
@@ -509,19 +516,19 @@
 }
 
 GstCaps *
-gst_decklink_mode_get_caps (GstDecklinkModeEnum e, BMDPixelFormat f)
+gst_decklink_mode_get_caps (GstDecklinkModeEnum e, BMDPixelFormat f, gboolean input)
 {
   GstCaps *caps;
 
   caps = gst_caps_new_empty ();
   caps =
-      gst_caps_merge_structure (caps, gst_decklink_mode_get_structure (e, f));
+      gst_caps_merge_structure (caps, gst_decklink_mode_get_structure (e, f, input));
 
   return caps;
 }
 
 GstCaps *
-gst_decklink_mode_get_caps_all_formats (GstDecklinkModeEnum e)
+gst_decklink_mode_get_caps_all_formats (GstDecklinkModeEnum e, gboolean input)
 {
   GstCaps *caps;
   guint i;
@@ -530,13 +537,13 @@
   for (i = 1; i < G_N_ELEMENTS (formats); i++)
     caps =
         gst_caps_merge_structure (caps, gst_decklink_mode_get_structure (e,
-            formats[i].format));
+            formats[i].format, input));
 
   return caps;
 }
 
 GstCaps *
-gst_decklink_pixel_format_get_caps (BMDPixelFormat f)
+gst_decklink_pixel_format_get_caps (BMDPixelFormat f, gboolean input)
 {
   int i;
   GstCaps *caps;
@@ -544,7 +551,7 @@
 
   caps = gst_caps_new_empty ();
   for (i = 1; i < (int) G_N_ELEMENTS (modes); i++) {
-    s = gst_decklink_mode_get_structure ((GstDecklinkModeEnum) i, f);
+    s = gst_decklink_mode_get_structure ((GstDecklinkModeEnum) i, f, input);
     caps = gst_caps_merge_structure (caps, s);
   }
 
@@ -552,7 +559,7 @@
 }
 
 GstCaps *
-gst_decklink_mode_get_template_caps (void)
+gst_decklink_mode_get_template_caps (gboolean input)
 {
   int i;
   GstCaps *caps;
@@ -561,7 +568,7 @@
   for (i = 1; i < (int) G_N_ELEMENTS (modes); i++)
     caps =
         gst_caps_merge (caps,
-        gst_decklink_mode_get_caps_all_formats ((GstDecklinkModeEnum) i));
+        gst_decklink_mode_get_caps_all_formats ((GstDecklinkModeEnum) i, input));
 
   return caps;
 }
@@ -578,7 +585,7 @@
     return NULL;
 
   for (i = 1; i < (int) G_N_ELEMENTS (modes); i++) {
-    mode_caps = gst_decklink_mode_get_caps ((GstDecklinkModeEnum) i, *format);
+    mode_caps = gst_decklink_mode_get_caps ((GstDecklinkModeEnum) i, *format, FALSE);
     if (gst_caps_can_intersect (caps, mode_caps)) {
       gst_caps_unref (mode_caps);
       return gst_decklink_get_mode ((GstDecklinkModeEnum) i);
@@ -918,6 +925,8 @@
       GST_WARNING ("selected device does not have input interface: 0x%08x",
           ret);
     } else {
+      IDeckLinkDisplayModeIterator *mode_iter;
+
       devices[i].input.device = decklink;
       devices[i].input.clock = gst_decklink_clock_new ("GstDecklinkInputClock");
       GST_DECKLINK_CLOCK_CAST (devices[i].input.clock)->input =
@@ -925,6 +934,27 @@
       devices[i].input.
           input->SetCallback (new GStreamerDecklinkInputCallback (&devices[i].
               input));
+
+      if ((ret =
+              devices[i].input.input->GetDisplayModeIterator (&mode_iter)) ==
+          S_OK) {
+        IDeckLinkDisplayMode *mode;
+
+        GST_DEBUG ("Input %d supports:", i);
+        while ((ret = mode_iter->Next (&mode)) == S_OK) {
+          const char *name;
+
+          mode->GetName (&name);
+          GST_DEBUG ("    %s mode: 0x%08x width: %ld height: %ld"
+              " fields: 0x%08x flags: 0x%08x", name,
+              (int) mode->GetDisplayMode (), mode->GetWidth (),
+              mode->GetHeight (), (int) mode->GetFieldDominance (),
+              (int) mode->GetFlags ());
+          mode->Release ();
+        }
+        mode_iter->Release ();
+      }
+      ret = S_OK;
     }
 
     ret = decklink->QueryInterface (IID_IDeckLinkOutput,
@@ -933,11 +963,34 @@
       GST_WARNING ("selected device does not have output interface: 0x%08x",
           ret);
     } else {
+      IDeckLinkDisplayModeIterator *mode_iter;
+
       devices[i].output.device = decklink;
       devices[i].output.clock =
           gst_decklink_clock_new ("GstDecklinkOutputClock");
       GST_DECKLINK_CLOCK_CAST (devices[i].output.clock)->output =
           &devices[i].output;
+
+      if ((ret =
+              devices[i].output.output->GetDisplayModeIterator (&mode_iter)) ==
+          S_OK) {
+        IDeckLinkDisplayMode *mode;
+
+        GST_DEBUG ("Output %d supports:", i);
+        while ((ret = mode_iter->Next (&mode)) == S_OK) {
+          const char *name;
+
+          mode->GetName (&name);
+          GST_DEBUG ("    %s mode: 0x%08x width: %ld height: %ld"
+              " fields: 0x%08x flags: 0x%08x", name,
+              (int) mode->GetDisplayMode (), mode->GetWidth (),
+              mode->GetHeight (), (int) mode->GetFieldDominance (),
+              (int) mode->GetFlags ());
+          mode->Release ();
+        }
+        mode_iter->Release ();
+      }
+      ret = S_OK;
     }
 
     ret = decklink->QueryInterface (IID_IDeckLinkConfiguration,
diff --git a/sys/decklink/gstdecklink.h b/sys/decklink/gstdecklink.h
index 9f95c56..90fda5c 100644
--- a/sys/decklink/gstdecklink.h
+++ b/sys/decklink/gstdecklink.h
@@ -160,8 +160,8 @@
 const GstDecklinkMode * gst_decklink_get_mode (GstDecklinkModeEnum e);
 const GstDecklinkModeEnum gst_decklink_get_mode_enum_from_bmd (BMDDisplayMode mode);
 const BMDVideoConnection gst_decklink_get_connection (GstDecklinkConnectionEnum e);
-GstCaps * gst_decklink_mode_get_caps (GstDecklinkModeEnum e, BMDPixelFormat f);
-GstCaps * gst_decklink_mode_get_template_caps (void);
+GstCaps * gst_decklink_mode_get_caps (GstDecklinkModeEnum e, BMDPixelFormat f, gboolean input);
+GstCaps * gst_decklink_mode_get_template_caps (gboolean input);
 
 typedef struct _GstDecklinkOutput GstDecklinkOutput;
 struct _GstDecklinkOutput {
@@ -231,7 +231,7 @@
 
 const GstDecklinkMode * gst_decklink_find_mode_for_caps (GstCaps * caps);
 const GstDecklinkMode * gst_decklink_find_mode_and_format_for_caps (GstCaps * caps, BMDPixelFormat * format);
-GstCaps * gst_decklink_mode_get_caps_all_formats (GstDecklinkModeEnum e);
-GstCaps * gst_decklink_pixel_format_get_caps (BMDPixelFormat f);
+GstCaps * gst_decklink_mode_get_caps_all_formats (GstDecklinkModeEnum e, gboolean input);
+GstCaps * gst_decklink_pixel_format_get_caps (BMDPixelFormat f, gboolean input);
 
 #endif
diff --git a/sys/decklink/gstdecklinkvideosink.cpp b/sys/decklink/gstdecklinkvideosink.cpp
index 741d74f..1612f8b 100644
--- a/sys/decklink/gstdecklinkvideosink.cpp
+++ b/sys/decklink/gstdecklinkvideosink.cpp
@@ -227,7 +227,7 @@
           (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
               G_PARAM_CONSTRUCT)));
 
-  templ_caps = gst_decklink_mode_get_template_caps ();
+  templ_caps = gst_decklink_mode_get_template_caps (FALSE);
   templ_caps = gst_caps_make_writable (templ_caps);
   /* For output we support any framerate and only really care about timestamps */
   gst_caps_map_in_place (templ_caps, reset_framerate, NULL);
@@ -405,17 +405,17 @@
 
   if (self->mode == GST_DECKLINK_MODE_AUTO
       && self->video_format == GST_DECKLINK_VIDEO_FORMAT_AUTO)
-    mode_caps = gst_decklink_mode_get_template_caps ();
+    mode_caps = gst_decklink_mode_get_template_caps (FALSE);
   else if (self->video_format == GST_DECKLINK_VIDEO_FORMAT_AUTO)
-    mode_caps = gst_decklink_mode_get_caps_all_formats (self->mode);
+    mode_caps = gst_decklink_mode_get_caps_all_formats (self->mode, FALSE);
   else if (self->mode == GST_DECKLINK_MODE_AUTO)
     mode_caps =
         gst_decklink_pixel_format_get_caps (gst_decklink_pixel_format_from_type
-        (self->video_format));
+        (self->video_format), FALSE);
   else
     mode_caps =
         gst_decklink_mode_get_caps (self->mode,
-        gst_decklink_pixel_format_from_type (self->video_format));
+        gst_decklink_pixel_format_from_type (self->video_format), FALSE);
   mode_caps = gst_caps_make_writable (mode_caps);
   /* For output we support any framerate and only really care about timestamps */
   gst_caps_map_in_place (mode_caps, reset_framerate, NULL);
diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp
index d82c5fc..f5e785c 100644
--- a/sys/decklink/gstdecklinkvideosrc.cpp
+++ b/sys/decklink/gstdecklinkvideosrc.cpp
@@ -59,6 +59,8 @@
   CaptureFrame *frame = (CaptureFrame *) data;
 
   frame->frame->Release ();
+  if (frame->tc)
+    gst_video_time_code_free (frame->tc);
   g_free (frame);
 }
 
@@ -179,7 +181,7 @@
           (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
               G_PARAM_CONSTRUCT)));
 
-  templ_caps = gst_decklink_mode_get_template_caps ();
+  templ_caps = gst_decklink_mode_get_template_caps (TRUE);
   gst_element_class_add_pad_template (element_class,
       gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, templ_caps));
   gst_caps_unref (templ_caps);
@@ -418,7 +420,7 @@
   format = self->caps_format;
   g_mutex_unlock (&self->lock);
 
-  mode_caps = gst_decklink_mode_get_caps (mode, format);
+  mode_caps = gst_decklink_mode_get_caps (mode, format, TRUE);
 
   if (filter) {
     caps =
@@ -585,6 +587,7 @@
   CaptureFrame *f;
   GstCaps *caps;
   gboolean caps_changed = FALSE;
+  const GstDecklinkMode *mode;
 
   g_mutex_lock (&self->lock);
   while (g_queue_is_empty (&self->current_frames) && !self->flushing) {
@@ -637,7 +640,7 @@
 
   g_mutex_unlock (&self->lock);
   if (caps_changed) {
-    caps = gst_decklink_mode_get_caps (f->mode, f->format);
+    caps = gst_decklink_mode_get_caps (f->mode, f->format, TRUE);
     gst_video_info_from_caps (&self->info, caps);
     gst_base_src_set_caps (GST_BASE_SRC_CAST (bsrc), caps);
     gst_element_post_message (GST_ELEMENT_CAST (self),
@@ -665,6 +668,10 @@
   GST_BUFFER_DURATION (*buffer) = f->capture_duration;
   gst_buffer_add_video_time_code_meta (*buffer, f->tc);
 
+  mode = gst_decklink_get_mode (self->mode);
+  if (mode->interlaced && mode->tff)
+    GST_BUFFER_FLAG_SET (*buffer, GST_VIDEO_BUFFER_FLAG_TFF | GST_VIDEO_BUFFER_FLAG_INTERLACED);
+
   GST_DEBUG_OBJECT (self,
       "Outputting buffer %p with timestamp %" GST_TIME_FORMAT " and duration %"
       GST_TIME_FORMAT, *buffer, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*buffer)),
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index 2c0cdb2..39f5aba 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -322,7 +322,7 @@
 elements_audiointerleave_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 
 elements_pnm_CFLAGS = \
-	$(GST_PLUGINS_BASE_CFLAGS)
+	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
 elements_pnm_LDADD = \
 	$(GST_PLUGINS_BASE_LIBS) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
@@ -395,7 +395,6 @@
 
 libs_vp8parser_LDADD = \
 	$(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-@GST_API_VERSION@.la \
-	$(GST_PLUGINS_BAD_LIBS) -lgstcodecparsers-@GST_API_VERSION@ \
 	$(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
 
 elements_videoframe_audiolevel_CFLAGS = \
@@ -472,23 +471,21 @@
 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_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(AM_CFLAGS) $(LIBXML2_CFLAGS)
 elements_dash_demux_LDADD = \
-	$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
-	-lgsttag-$(GST_API_VERSION) \
-	-lgstapp-$(GST_API_VERSION) \
-	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) \
+	$(GST_BASE_LIBS) $(LIBXML2_LIBS) $(LDADD)
 
 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_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(AM_CFLAGS) $(LIBXML2_CFLAGS)
 elements_mssdemux_LDADD = \
-	$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
-	-lgsttag-$(GST_API_VERSION) \
-	-lgstapp-$(GST_API_VERSION) \
-	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) \
+	$(GST_BASE_LIBS) $(LIBXML2_LIBS) $(LDADD)
 
 elements_mssdemux_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/mssdemux.c
 
@@ -499,7 +496,7 @@
 	$(top_builddir)/gst-libs/gst/insertbin/libgstinsertbin-@GST_API_VERSION@.la \
 	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
 libs_insertbin_CFLAGS = \
-	$(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+	$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
 
 libs_player_SOURCES = libs/player.c
 
@@ -652,11 +649,11 @@
 elements_hlsdemux_m3u8_LDADD = $(GST_BASE_LIBS) $(LDADD)
 elements_hlsdemux_m3u8_SOURCES = elements/hlsdemux_m3u8.c
 
-elements_hls_demux_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
-elements_hls_demux_LDADD = $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) $(LDADD) \
-	-lgsttag-$(GST_API_VERSION) \
-	-lgstapp-$(GST_API_VERSION) \
-	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+elements_hls_demux_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_hls_demux_LDADD = \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) \
+	$(GST_BASE_LIBS) $(LDADD)
 elements_hls_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/hls_demux.c
 
 orc_compositor_CFLAGS = $(ORC_CFLAGS)
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index cf3a183..98fcb0c 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -315,10 +315,9 @@
 	elements/elements_dash_demux-adaptive_demux_common.$(OBJEXT) \
 	elements/elements_dash_demux-dash_demux.$(OBJEXT)
 elements_dash_demux_OBJECTS = $(am_elements_dash_demux_OBJECTS)
-elements_dash_demux_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+elements_dash_demux_DEPENDENCIES = $(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) \
-	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
 elements_dash_demux_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(elements_dash_demux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
@@ -403,9 +402,9 @@
 	elements/elements_hls_demux-adaptive_demux_common.$(OBJEXT) \
 	elements/elements_hls_demux-hls_demux.$(OBJEXT)
 elements_hls_demux_OBJECTS = $(am_elements_hls_demux_OBJECTS)
-elements_hls_demux_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
-	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+elements_hls_demux_DEPENDENCIES = $(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
 elements_hls_demux_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(elements_hls_demux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
@@ -476,10 +475,9 @@
 	elements/elements_mssdemux-adaptive_demux_common.$(OBJEXT) \
 	elements/elements_mssdemux-mssdemux.$(OBJEXT)
 elements_mssdemux_OBJECTS = $(am_elements_mssdemux_OBJECTS)
-elements_mssdemux_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+elements_mssdemux_DEPENDENCIES = $(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) \
-	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
 elements_mssdemux_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(elements_mssdemux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
@@ -1835,7 +1833,8 @@
 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)
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
 
 elements_pnm_LDADD = \
 	$(GST_PLUGINS_BASE_LIBS) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
@@ -1902,7 +1901,6 @@
 
 libs_vp8parser_LDADD = \
 	$(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-@GST_API_VERSION@.la \
-	$(GST_PLUGINS_BAD_LIBS) -lgstcodecparsers-@GST_API_VERSION@ \
 	$(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
 
 elements_videoframe_audiolevel_CFLAGS = \
@@ -1978,21 +1976,19 @@
 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_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(AM_CFLAGS) $(LIBXML2_CFLAGS)
 elements_dash_demux_LDADD = \
-	$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
-	-lgsttag-$(GST_API_VERSION) \
-	-lgstapp-$(GST_API_VERSION) \
-	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) \
+	$(GST_BASE_LIBS) $(LIBXML2_LIBS) $(LDADD)
 
 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_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(AM_CFLAGS) $(LIBXML2_CFLAGS)
 elements_mssdemux_LDADD = \
-	$(LDADD) $(LIBXML2_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
-	-lgsttag-$(GST_API_VERSION) \
-	-lgstapp-$(GST_API_VERSION) \
-	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) \
+	$(GST_BASE_LIBS) $(LIBXML2_LIBS) $(LDADD)
 
 elements_mssdemux_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/mssdemux.c
 pipelines_streamheader_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
@@ -2002,7 +1998,7 @@
 	$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
 
 libs_insertbin_CFLAGS = \
-	$(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+	$(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
 
 libs_player_SOURCES = libs/player.c
 libs_player_LDADD = \
@@ -2130,11 +2126,11 @@
 elements_hlsdemux_m3u8_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS) -I$(top_srcdir)/ext/hls
 elements_hlsdemux_m3u8_LDADD = $(GST_BASE_LIBS) $(LDADD)
 elements_hlsdemux_m3u8_SOURCES = elements/hlsdemux_m3u8.c
-elements_hls_demux_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
-elements_hls_demux_LDADD = $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) $(LDADD) \
-	-lgsttag-$(GST_API_VERSION) \
-	-lgstapp-$(GST_API_VERSION) \
-	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la
+elements_hls_demux_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_hls_demux_LDADD = \
+	$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
+	$(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) \
+	$(GST_BASE_LIBS) $(LDADD)
 
 elements_hls_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/hls_demux.c
 orc_compositor_CFLAGS = $(ORC_CFLAGS)
@@ -4886,7 +4882,6 @@
 
 clean-local: clean-local-check
 distclean-local: distclean-local-orc
-	$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
 
 @WITH_GST_PLAYER_TESTS_TRUE@$(PLAYER_MEDIA_FILES):
 @WITH_GST_PLAYER_TESTS_TRUE@	$(MKDIR_P) media
diff --git a/win32/common/config.h b/win32/common/config.h
index 45c018a..86b4818 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-11-17"
+#define GST_PACKAGE_RELEASE_DATETIME "2016-11-29"
 
 /* Define if static plugins should be built */
 #undef GST_PLUGIN_BUILD_STATIC
@@ -737,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.10.1"
+#define PACKAGE_STRING "GStreamer Bad Plug-ins 1.10.2"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gst-plugins-bad"
@@ -746,7 +746,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.10.1"
+#define PACKAGE_VERSION "1.10.2"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -790,7 +790,7 @@
 #undef USE_EGL_RPI
 
 /* Version number of package */
-#define VERSION "1.10.1"
+#define VERSION "1.10.2"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
