Merge tag 'upstream/1.4.4' into debian-experimental

Upstream version 1.4.4
diff --git a/ChangeLog b/ChangeLog
index 7414bb4..7948c32 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,882 @@
-=== release 1.4.3 ===
+=== release 1.4.4 ===
 
-2014-09-24  Sebastian Dröge <slomo@coaxion.net>
+2014-11-06  Sebastian Dröge <slomo@coaxion.net>
 
 	* configure.ac:
-	  releasing 1.4.3
+	  releasing 1.4.4
+
+2014-11-06 11:53:04 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videoparsers/gsth265parse.c:
+	  h265parse: don't unnecesarily set src_caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739374
+
+2014-10-29 22:55:47 +0100  Matej Knopp <matej.knopp@gmail.com>
+
+	* gst/videoparsers/gsth264parse.c:
+	  h264parse: don't unnecesarily set src_caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739374
+
+2014-10-31 12:52:50 +1100  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	* ext/gl/gstglimagesink.h:
+	  glimagesink: resize the viewport correctly on a caps change
+	  with force-aspect-ratio=true, if the width or height changed, the
+	  viewport wasn't being updated to respect the new video width and height
+	  until a resize occured.
+
+2014-11-04 09:52:11 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  gl/cocoa: include gl3.h in configure too for consistency with gstglapi.h
+
+2014-11-03 23:24:33 +0000  Julien Isorce <julien.isorce@gmail.com>
+
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: use NSAutoreleasePool to free resize data
+	  Otherwise when resizing the window you will also get messages like:
+	  class NSConcreteMapTable autoreleased with no pool in place - just leaking
+	  class NSConcreteValue autoreleased with no pool in place - just leaking
+	  class NSConcreteValue autoreleased with no pool in place - just leaking
+	  class __NSCFDictionary autoreleased with no pool in place - just leaking
+
+2014-11-03 23:08:09 +0000  Julien Isorce <julien.isorce@gmail.com>
+
+	* gst-libs/gst/gl/gstglapi.h:
+	  gl/cocoa: include gl3.h to have GL_CONTEXT_PROFILE_MASK
+
+2014-11-03 23:07:34 +0000  Julien Isorce <julien.isorce@gmail.com>
+
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: make sure to turn on frame rectangle changes notifications
+	  Default value of property postsFrameChangedNotifications is YES
+	  but it is worth to explicitly enable it.
+
+2014-11-03 23:02:17 +0000  Julien Isorce <julien.isorce@gmail.com>
+
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: fix uncaught exception 'unrecognized selector sent to instance'
+	  Need to set the ':' as the reshape method now takes one parameter.
+	  For the story, the GstGLNSView was previously inheriting from
+	  NSOpenGLView which has a reshape function without any parameter.
+	  Now the GstGLNSView inherits from NSView and we re-use the reshape
+	  function manually.
+
+2014-11-03 22:59:41 +0000  Julien Isorce <julien.isorce@gmail.com>
+
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: fix compiler warning
+	  Use the reshape function after being defined. The other way
+	  would have been to declare the reshape function in the header.
+	  gstglwindow_cocoa.m: In function '-[GstGLNSView drawRect:]':
+	  gstglwindow_cocoa.m:555: warning: 'GstGLNSView' may not respond to '-reshape'
+	  gstglwindow_cocoa.m:555: warning: (Messages without a matching method signature
+	  gstglwindow_cocoa.m:555: warning: will be assumed to return 'id' and accept
+	  gstglwindow_cocoa.m:555: warning: '...' as arguments.)
+
+2014-10-21 16:21:08 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: Fix compiler warning
+	  gstglwindow_cocoa.m: In function '-[GstGLNSView drawRect:]':
+	  gstglwindow_cocoa.m:555: warning: 'GstGLNSView' may not respond to '-reshape'
+	  gstglwindow_cocoa.m:555: warning: (Messages without a matching method signature
+	  gstglwindow_cocoa.m:555: warning: will be assumed to return 'id' and accept
+	  gstglwindow_cocoa.m:555: warning: '...' as arguments.)
+
+2014-10-29 18:18:07 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/gl/gstglshadervariables.c:
+	  glshader: Fix memory leak
+	  Memory is only freed in the TRUE clause of the if conditional. Free in the else
+	  clause as well.
+	  Also, consolidate g_malloc + sprintf into a g_strdup_printf().
+	  CID #1212171
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739368
+
+2014-10-31 12:30:53 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	* gst-libs/gst/gl/gstgldisplay.c:
+	* gst-libs/gst/gl/gstglwindow.c:
+	  gl: sprinkle some Since markers
+
+2014-10-24 16:52:42 +0200  Matthieu Bouron <matthieu.bouron@collabora.com>
+
+	* gst/mpegtsdemux/mpegtsbase.c:
+	  mpegtsbase: do not remove programs on EOS
+	  As a consequence, tsdemux won't remove its pads anymore on EOS.
+	  Fixes the case when mpegtsbase is not able to process new packets
+	  after EOS as the corresponding pids aren't known anymore because
+	  the programs were removed and the pes/psi were kept, preventing the
+	  PAT to be parsed again.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738695
+	  Conflicts:
+	  gst/mpegtsdemux/mpegtsbase.c
+
+2014-10-30 19:01:20 +1100  Matthew Waters <matthew@centricular.com>
+
+	* tests/examples/gl/sdl/sdlshare.c:
+	  gl/examples: use the current X Display from SDL
+	  allows GL context sharing to occur.
+
+2014-10-29 10:09:35 +0100  Vincent Abriou <vincent.abriou@st.com>
+
+	* configure.ac:
+	  configure.ac: auto decision to include GL library fails
+	  The part of the configure.ac that consist to check if we
+	  can include both GL and GLES2 at the same time is failing.
+	  Indeed, in the case NEED_GLES2=yes and NEED_OPENGL=auto,
+	  HAVE_OPENGL variable is updated whereas it should be HAVE_GL
+	  variable that has to be updated (HAVE_OPENGL variable is not
+	  used in the rest of the configure.ac).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739348
+	  Signed-off-by: Vincent Abriou <vincent.abriou@st.com>
+	  Reviewed-by: Benjamin GAIGNARD <benjamin.gaignard@linaro.org>
+
+2014-10-28 17:44:47 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/faad/gstfaad.c:
+	  faad: fix wrong unrefs in set_format error code path
+
+2014-10-28 18:01:27 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglfilter.c:
+	  glfilter: avoid uninitialized variable size when chaining multiple glfilters
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739277
+
+2014-10-23 17:42:27 +0300  Vootele Vesterblom <vov@bang-olufsen.dk>
+
+	* gst/rawparse/gstrawparse.c:
+	  rawparse: fix handling of segment event in sink event handler
+
+2014-10-22 15:07:04 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/rawparse/gstrawparse.c:
+	  rawparse: Check for 0-size after adjusting the size for the frame size
+	  If we don't have a complete raw audio frame we would otherwise still
+	  ask for a 0 sized buffer from the adapter.
+
+2014-10-22 14:43:50 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/rawparse/gstrawparse.c:
+	  rawparse: Don't try to retrieve 0 byte buffers from the adapter in multi-frame mode
+
+2014-10-21 12:39:14 +0200  Matthieu Bouron <matthieu.bouron@collabora.com>
+
+	* ext/hls/gsthlsdemux.c:
+	  hlsdemux: reset end_of_playlist attribute when we receive a seek
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738696
+
+2014-10-09 15:12:01 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* tests/check/libs/vc1parser.c:
+	  vc1parser: fix expected level in sequence-layer parsing unit test
+	  Sequence-layer used for unit test have a level set to 2 which should
+	  match the medium level, not the high.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738230
+
+2014-10-09 15:05:55 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst-libs/gst/codecparsers/gstvc1parser.h:
+	  vc1parser: fix level values for simple/main profile
+	  In simple profile, level set to 0 or 2 indicate low and medium level
+	  respectively. In main profile, level set to 0, 2 or 4 indicate low,
+	  medium and high level respectively.
+	  Level values are defined in Annex J.1.2 of the SMPTE 421M.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738230
+
+2014-10-01 16:17:46 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/videoparsers/gstvc1parse.c:
+	* gst/videoparsers/gstvc1parse.h:
+	  vc1parse: select caps according to wmv format at negotiation
+	  Some VC1 decoder can have different caps according to wmv format, ie
+	  WMV3 or WVC1.
+	  So instead of keeping the first available caps, we interserct with
+	  current WMV format.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738532
+
+2014-10-20 09:47:27 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/rtmp/gstrtmpsink.c:
+	  rtmpsink: Declare sink variable that was forgotten in last commit
+
+2014-10-19 20:35:41 +0200  Havard Graff <havard.graff@gmail.com>
+
+	* ext/rtmp/gstrtmpsink.c:
+	  rtmpsink: Free URI string in finalize()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738674
+
+2014-09-22 09:44:14 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/videoparsers/gstvc1parse.c:
+	  vc1parse: parse frame header when stream format is ASF/raw for simple/main profile
+	  When stream-format is ASF or sequence-layer-raw-frame, we basically have
+	  a raw frame so we can parse it to extract some information such the
+	  keyframe flag. The only requirement is to have a valid sequence-header.
+	  This commit parse the frame header and set the DELTA_UNIT buffer flag in
+	  case the frame is not a keyframe.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738519
+
+2014-10-13 14:05:24 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/videoparsers/gstvc1parse.c:
+	  vc1parse: just assume none header-format when no codec_data is present
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738449
+
+2014-10-09 18:18:02 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/videoparsers/gstvc1parse.c:
+	  vc1parse: fix framesize when input is frame-layer
+	  frame-layer header is represented as a sequence of 32 bit unsigned
+	  integer serialized in little-endian byte order, so framesize is on the
+	  first 3 bytes.
+	  SMPTE 421M Annex L.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738243
+
+2014-10-10 13:05:49 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/fluidsynth/gstfluiddec.c:
+	  fluiddec: don't leak incoming caps event
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738291
+
+2014-10-09 11:51:16 +0200  Antonio Ospite <ao2@ao2.it>
+
+	* ext/fluidsynth/gstfluiddec.c:
+	  fluiddec: fix some memory leaks
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738223
+
+2014-10-21 15:42:32 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Fix locking
+	  The object lock only protects the session, as we modify
+	  the session from other threads when the bitrate property
+	  is changed. Don't hold it much longer than for session
+	  related things.
+	  And we need to release the video decoder stream lock before
+	  enqueueing a frames. It might wait for our callback to dequeue
+	  a frame from another thread, which will then take the stream
+	  lock too and deadlock.
+
+2014-10-19 14:57:43 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Use kVTProfileLevel_H264_Baseline_AutoLevel only on iOS
+	  It is not required on OSX apparently and was only added in 10.9.6 there.
+	  Calculating the correct level from the configuration is not trivial, so let's
+	  just not set a level at all here.
+
+2014-10-19 14:51:40 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	* sys/applemedia/vtenc.c:
+	  vtenc: VTCompressionSessionPrepareToEncodeFrames only exists since 10.9.6
+	  Check with configure for it instead of using one of the availability macros
+	  as those wouldn't work as expected with minor versions.
+
+2014-10-19 14:32:31 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Remove unused #define
+
+2014-10-13 13:28:57 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: Only finalize the other context in finalize()
+	  Otherwise we change a value of a property when going to READY state,
+	  which is unexpected behaviour.
+
+2014-10-13 11:56:03 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/gl/gstglimagesink.c:
+	  glimagesink: Don't leak other-context
+
+2014-10-13 13:27:55 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/gl/gstglmixer.c:
+	  glmixer: Call the pad's parent class finalize method
+
+2014-10-09 10:54:35 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: Add support for HiDPI displays
+	  Without this our GL surface would be upscaled after rendering
+	  by Cocoa, which would reduce image quality.
+
+2014-10-01 16:04:36 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: Always update our viewport if Cocoa tells us something has changed
+	  The visible rect and bounds might be the same as before, but Cocoa
+	  might've changed our viewport without us nothing. This happens if
+	  you hide the view and show it again.
+
+2014-10-01 11:55:13 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: Handle NSView::renewGState() properly
+	  Don't update the screen until we redraw, this prevents flickering during
+	  scrolling, clipping, resizing, etc
+
+2014-09-29 09:33:42 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: Update viewport according to the current clipping
+	  We have to update the GL viewport if the NSView is only partially
+	  visible. Otherwise the content of the frame will be visibly offset.
+
+2014-09-29 10:49:46 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m:
+	  gl/cocoa: Improve the NSApplication initialization
+	  This is only for non-Cocoa apps but previously caused a 2 second
+	  waiting during startup for Cocoa apps. This is unacceptable.
+	  Instead we now check a bit more extensive if something actually
+	  runs on the GLib default main context, and if not don't even
+	  bother waiting for something to happen from there.
+
+2014-09-29 09:24:49 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: NSView::drawRect() should call into reshape too
+	  We a) need to render again because part of the window was
+	  obscured and b) might need to reshape because of clipping
+	  changes.
+
+2014-09-26 14:21:46 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m:
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: Call UI related API from the application main thread
+
+2014-09-26 13:05:27 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h:
+	* gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m:
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: Switch to a plain NSView subclass instead of NSOpenGLView
+	  We don't and can't use NSOpenGLView as it's supposed to be used and
+	  it gets into our way by being to clever in various situations.
+
+2014-09-25 16:13:19 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h:
+	* gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m:
+	  gl/cocoa: Switch from our custom main loop to a GMainLoop
+	  Simplifies code a lot and makes it more similar to the other backends.
+
+2014-09-25 16:12:24 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m:
+	  gl/cocoa: Clear the current GL context when it should happen
+
+2014-10-14 09:58:47 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  applemedia: VideoToolbox works properly on iOS now
+
+2014-10-14 09:19:59 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtdec.c:
+	  vtdec: Set reorder length to 0 if we can't calculate it
+	  Instead of leaving it at whatever value it had before.
+
+2014-09-19 14:36:39 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Fix encoder to work on iOS
+	  iOS has special stride requirements that we don't know yet, so copy
+	  input buffers into buffers allocated by iOS for now.
+	  Later we should check the stride and probably provide a buffer pool for these
+	  buffers so upstream can directly write in there.
+
+2014-09-19 14:32:46 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/coremediabuffer.c:
+	* sys/applemedia/corevideobuffer.c:
+	  applemedia: We need to map the coremedia buffers in non-readonly mode
+	  Our buffers claim to be writable so other elements expect to be able
+	  to write there without losing their changes.
+
+2014-09-18 17:49:46 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Let the encoder automatically choose a h264 level
+	  We should negotiate these things via caps...
+
+2014-09-18 13:45:33 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Use 0 instead of G_MAXDOUBLE as the max keyframe interval
+	  0 means no limit, which was meant here with G_MAXDOUBLE probably.
+
+2014-09-18 13:42:24 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Expected duration is supposed to be the duration of the stream, not a frame
+	  Just don't set it for now, it isn't really needed.
+
+2014-09-18 13:11:05 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	* sys/applemedia/vtenc.h:
+	  vtenc: Properly handle keyframes
+	  Especially set the SYNC_POINT flag on keyframes.
+
+2014-09-18 10:30:04 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtdec.c:
+	  vtdec: Fix compilation
+
+2014-09-18 09:47:06 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtdec.c:
+	  vtdec: Handle 0/1 framerates correctly by not calculating their frame duration
+
+2014-09-17 17:37:12 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/atdec.c:
+	  atdec: Fix some compiler warnings with newer clang
+
+2014-09-17 17:10:58 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Prepare encoder after setup
+	  This will allow encoding to happen faster on the first frame.
+
+2014-09-17 17:08:57 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	* sys/applemedia/vtenc.h:
+	  vtenc: Only drain the encoder in ::finish(), not on every frame
+	  Otherwise quality and bitrate will be bad.
+
+2014-09-17 15:39:26 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Error out if encoding returned an error
+	  Otherwise we will just continue consuming frames until all memory is filled
+	  up and the app crashes.
+
+2014-09-17 14:56:05 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Check for errors from VTCompressionSessionCompleteFrames()
+
+2014-09-17 14:55:24 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Properly scale timestamps for the API and set invalid values
+
+2014-09-17 14:54:39 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtdec.c:
+	  vtdec: Properly scale timestamps for the API and set invalid values
+
+2014-09-17 13:19:04 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/Makefile.am:
+	* sys/applemedia/plugin.m:
+	* sys/applemedia/vth264decbin.c:
+	* sys/applemedia/vth264decbin.h:
+	* sys/applemedia/vth264encbin.c:
+	* sys/applemedia/vth264encbin.h:
+	  applemedia: Remove old code that is of no use anymore
+
+2014-09-17 10:38:20 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/Makefile.am:
+	* sys/applemedia/plugin.m:
+	  applemedia: Do weak linking with the VideoToolbox framework
+	  It does not exist on older OSX and iOS but we still want to
+	  be able to use it when it's available.
+
+2014-09-16 16:51:28 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	* sys/applemedia/vtenc.h:
+	  vtenc: Port to GstVideoEncoder base class
+
+2014-09-16 16:13:16 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtenc.c:
+	  vtenc: Use correct instance struct size
+
+2014-09-16 15:48:11 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/vtdec.c:
+	  vtdec: Fix compiler warnings
+	  values of type 'OSStatus' should not be used as format arguments; add an explicit cast to 'int' instead [-Wformat]
+
+2014-09-16 15:02:46 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/applemedia/Makefile.am:
+	* sys/applemedia/coremediactx.c:
+	* sys/applemedia/coremediactx.h:
+	* sys/applemedia/dynapi-internal.h:
+	* sys/applemedia/dynapi.c:
+	* sys/applemedia/dynapi.h:
+	* sys/applemedia/mtapi.c:
+	* sys/applemedia/mtapi.h:
+	* sys/applemedia/vtapi.c:
+	* sys/applemedia/vtapi.h:
+	* sys/applemedia/vtenc.c:
+	* sys/applemedia/vtenc.h:
+	  vtenc: Port to the real VideoToolbox API instead of using our dlopen() wrapper
+	  It's a public framework since a long time.
+
+2014-10-09 01:18:16 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst/videoparsers/gsth264parse.c:
+	  h264parse: expose parsed profile and level to downstream
+	  Set parsed profile and level in src caps.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=732239
+
+2014-10-09 11:46:23 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videoparsers/gsth265parse.c:
+	  h265parse: expose parsed profile, tier and level to downstream
+	  https://bugzilla.gnome.org/show_bug.cgi?id=732239
+
+2014-10-06 21:25:30 +0300  Vivia Nikolaidou <n.vivia@gmail.com>
+
+	* ext/curl/gstcurlsmtpsink.c:
+	  curlsmtpsink: Set CURLOPT_UPLOAD to 1 to not use VRFY and other unneeded commands
+	  Fixes the sink with SMTP servers that disable VRFY for spam protection.
+	  http://sourceforge.net/p/curl/bugs/1389/
+
+2014-10-06 10:11:47 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideoaggregator.c:
+	  videoaggregator: Unmap and free GstVideoFrames as needed after conversion and errors
+
+2014-10-06 10:11:23 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/base/gstaggregator.c:
+	  aggregator: Unref the taglist in GstAggregator::stop()
+
+2014-10-01 16:19:02 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* gst/videoparsers/gstvc1parse.c:
+	  vc1parse: unref caps when it is empty in renegotiate()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=737724
+
+2014-10-02 10:26:43 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* sys/androidmedia/gstamc.c:
+	  androidmedia: Fix calculation of the frame size for COLOR_FormatYUV420Planar
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734156
+
+2014-10-01 00:53:59 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/fluidsynth/gstfluiddec.c:
+	  fluiddec: don't crash on 0-sized input buffers
+	  https://bugzilla.gnome.org/show_bug.cgi?id=737658
+
+2014-09-30 14:58:06 +0200  Lubosz Sarnecki <lubosz@gmail.com>
+
+	* configure.ac:
+	  gltransformation: requires graphene 1.0.0
+
+2014-09-29 10:01:27 +0200  Jesper Larsen <knorr.jesper@gmail.com>
+
+	* gst/mpegtsdemux/tsdemux.c:
+	  tsdemux: do not discard on discont if PES start
+	  If a discontinuity in the stream is detected, data is discarded until
+	  a new PES starts. If the first packet after the discontinuity is also
+	  the start of a PES, there is no reason to discard the packets.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=737569
+
+2014-09-09 13:12:31 +0200  Matthieu Bouron <matthieu.bouron@collabora.com>
+
+	* ext/dash/gstdashdemux.c:
+	* ext/dash/gstdashdemux.h:
+	  dashdemux: mark first buffer as discont after restarting a download task
+	  Mark first buffer as discont after restarting a download task, so
+	  downstream can reset its state to properly handle the new fragment.
+	  Related issue: https://bugzilla.gnome.org/show_bug.cgi?id=736318
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736319
+
+2014-09-19 22:32:39 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/dash/gstdashdemux.c:
+	  dashdemux: push a time segment when restarting streaming
+	  This should inform demuxers/decoders downstream that the stream is
+	  about to start from a new position and they should flush accordingly
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736319
+
+2014-10-09 12:28:11 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: output why we cannot convert a buffer
+
+2014-10-09 12:25:55 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: fix planar YUV download
+	  - sample the u and v planes properly
+	  - output the correctly scaled u and v planes for different chroma block sizes
+
+2014-10-07 23:04:30 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: fix UYVY download green screen
+
+2014-10-07 22:50:22 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolrconvert: fix YUY2 download
+	  - The shader was outputing the wrong values compared with raw
+	  videotestsrc.
+	  - deal with the texture edge properly.
+	  - properly sample the 2x1 rectangle for the u and v values
+	  - don't double sample the y value
+
+2014-09-25 17:01:31 +0200  Lubosz Sarnecki <lubosz@gmail.com>
+
+	* ext/gl/gstgltransformation.c:
+	  gltransformation: graphene multiplication order has changed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733510
+
+2014-09-22 10:08:17 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	  gl: Let gst_gl_context_get_thread() return a new reference to the GThread
+	  Otherwise it might go away in the meantime and the caller has some random pointer.
+	  Conflicts:
+	  gst-libs/gst/gl/gstglcontext.c
+
+2014-09-30 14:46:14 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcolorconvert.c:
+	  glcolorconvert: convert xRGB into ARGB properly
+	  The alpha channel might not be the last component so check which one
+	  it is in and clobber that one instead.
+
+2014-09-30 01:38:05 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglmemory.c:
+	  glmemory: unset the opposite corresponding transfer flags when mapped with write
+	  fixes consistency with consecutive gst_memory_map()'s with
+	  flags & GST_MAP_WRITE
+
+2014-09-29 08:54:29 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	  glcontext: Initialize variable
+	  Avoids the following warning:
+	  gstglcontext.c:647:58: error: 'prev' may be used uninitialized in
+	  this function [-Werror=maybe-uninitialized]
+
+2014-09-29 00:32:05 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	  glcontext: fixup error in sharegroup comment
+
+2014-09-29 00:24:28 +1000  Matthew Waters <matthew@centricular.com>
+
+	* gst-libs/gst/gl/gstglcontext.c:
+	  glcontext: detect the sharegroup case where the context are in different chains
+	  In the end they will lead to the same root context in the tree so check that
+	  for equality.
+
+2014-09-23 12:02:18 +1000  Matthew Waters <ystreet00@gmail.com>
+
+	* gst-libs/gst/gl/gstglupload.c:
+	  glupload: fallback to upload if contexts cannot share GL resources
+	  Fixes pipelines of the form
+	  gleffects ! tee ! glimagesink
+	  as tee does not pass on the allocation query.
+
+2014-09-23 12:01:04 +1000  Matthew Waters <ystreet00@gmail.com>
+
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	* gst-libs/gst/gl/gstglcontext.c:
+	* gst-libs/gst/gl/gstglcontext.h:
+	  glcontext: add gst_gl_context_can_share
+	  Which determines whether two GstGLContext's can share sharable
+	  OpenGL resources.
+	  Conflicts:
+	  gst-libs/gst/gl/gstglcontext.c
+
+2014-09-21 21:30:58 +1000  Matthew Waters <ystreet00@gmail.com>
+
+	* docs/libs/gst-plugins-bad-libs-sections.txt:
+	* gst-libs/gst/gl/gstglcontext.c:
+	* gst-libs/gst/gl/gstglcontext.h:
+	  glcontext: add API to retreive the thread that context is active in
+
+2014-09-24 14:29:37 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglvideomixer.c:
+	  glvideomixer: skip input frames with an alpha of 0
+
+2014-09-24 13:13:19 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglmixer.c:
+	* ext/gl/gstglmixer.h:
+	* ext/gl/gstgltestsrc.c:
+	* ext/gl/gstgltestsrc.h:
+	* gst-libs/gst/gl/gstglfilter.c:
+	* gst-libs/gst/gl/gstglfilter.h:
+	  gl: download whenever we have sysmem capsfeatures
+	  Otherwise we could pass on a RGBA formatted buffer and downstream would
+	  misinterpret that as some other video format.
+	  Fixes pipelines of the form
+	  gleffects ! tee ! xvimagesink
+
+2014-09-29 11:44:54 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  configure: Don't build VideoToolbox elements on iOS for now
+	  They're only ported properly in master.
+
+2014-09-26 01:34:54 +1000  Matthew Waters <matthew@centricular.com>
+
+	* ext/gl/gstglvideomixer.c:
+	  glvideomixer: fix blending with low-alpha sources
+	  We also need to apply the blend paramaters to the alpha channel otherwise
+	  the output of the blend will appear black at low alpha values (< 0.2).
+
+2014-07-29 16:12:26 +0200  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst/videoparsers/gsth264parse.c:
+	  h264parse: Return flushing if we get chained while being set to READY
+	  Or not negotiated in the case we would be actually not negotiated
+	  Currently we are getting assertions from
+	  gst_pb_utils_add_codec_description_to_tag_list because of NULL
+	  caps.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=737186
+
+=== release 1.4.3 ===
+
+2014-09-24 12:43:28 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/inspect/plugin-accurip.xml:
+	* docs/plugins/inspect/plugin-adpcmdec.xml:
+	* docs/plugins/inspect/plugin-adpcmenc.xml:
+	* docs/plugins/inspect/plugin-asfmux.xml:
+	* docs/plugins/inspect/plugin-assrender.xml:
+	* docs/plugins/inspect/plugin-audiovisualizers.xml:
+	* docs/plugins/inspect/plugin-autoconvert.xml:
+	* docs/plugins/inspect/plugin-bayer.xml:
+	* docs/plugins/inspect/plugin-bz2.xml:
+	* docs/plugins/inspect/plugin-camerabin.xml:
+	* docs/plugins/inspect/plugin-chromaprint.xml:
+	* docs/plugins/inspect/plugin-coloreffects.xml:
+	* docs/plugins/inspect/plugin-curl.xml:
+	* docs/plugins/inspect/plugin-dataurisrc.xml:
+	* docs/plugins/inspect/plugin-debugutilsbad.xml:
+	* docs/plugins/inspect/plugin-dtsdec.xml:
+	* docs/plugins/inspect/plugin-dvb.xml:
+	* docs/plugins/inspect/plugin-dvbsuboverlay.xml:
+	* docs/plugins/inspect/plugin-dvdspu.xml:
+	* docs/plugins/inspect/plugin-faac.xml:
+	* docs/plugins/inspect/plugin-faad.xml:
+	* docs/plugins/inspect/plugin-festival.xml:
+	* docs/plugins/inspect/plugin-fieldanalysis.xml:
+	* docs/plugins/inspect/plugin-flite.xml:
+	* docs/plugins/inspect/plugin-fragmented.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-gstsiren.xml:
+	* docs/plugins/inspect/plugin-id3tag.xml:
+	* docs/plugins/inspect/plugin-inter.xml:
+	* docs/plugins/inspect/plugin-interlace.xml:
+	* docs/plugins/inspect/plugin-jpegformat.xml:
+	* docs/plugins/inspect/plugin-liveadder.xml:
+	* docs/plugins/inspect/plugin-mimic.xml:
+	* docs/plugins/inspect/plugin-mms.xml:
+	* docs/plugins/inspect/plugin-modplug.xml:
+	* docs/plugins/inspect/plugin-mpeg2enc.xml:
+	* docs/plugins/inspect/plugin-mpegpsdemux.xml:
+	* docs/plugins/inspect/plugin-mpegtsdemux.xml:
+	* docs/plugins/inspect/plugin-mpegtsmux.xml:
+	* docs/plugins/inspect/plugin-mpg123.xml:
+	* docs/plugins/inspect/plugin-mplex.xml:
+	* docs/plugins/inspect/plugin-ofa.xml:
+	* docs/plugins/inspect/plugin-openal.xml:
+	* docs/plugins/inspect/plugin-opencv.xml:
+	* docs/plugins/inspect/plugin-opus.xml:
+	* docs/plugins/inspect/plugin-pcapparse.xml:
+	* docs/plugins/inspect/plugin-pnm.xml:
+	* docs/plugins/inspect/plugin-rawparse.xml:
+	* docs/plugins/inspect/plugin-removesilence.xml:
+	* docs/plugins/inspect/plugin-resindvd.xml:
+	* docs/plugins/inspect/plugin-rfbsrc.xml:
+	* docs/plugins/inspect/plugin-schro.xml:
+	* docs/plugins/inspect/plugin-sdp.xml:
+	* docs/plugins/inspect/plugin-segmentclip.xml:
+	* docs/plugins/inspect/plugin-shm.xml:
+	* docs/plugins/inspect/plugin-smooth.xml:
+	* docs/plugins/inspect/plugin-soundtouch.xml:
+	* docs/plugins/inspect/plugin-spandsp.xml:
+	* docs/plugins/inspect/plugin-speed.xml:
+	* docs/plugins/inspect/plugin-subenc.xml:
+	* docs/plugins/inspect/plugin-videoparsersbad.xml:
+	* docs/plugins/inspect/plugin-voaacenc.xml:
+	* docs/plugins/inspect/plugin-voamrwbenc.xml:
+	* docs/plugins/inspect/plugin-waylandsink.xml:
+	* docs/plugins/inspect/plugin-y4mdec.xml:
+	* docs/plugins/inspect/plugin-zbar.xml:
+	* gst-plugins-bad.doap:
+	* win32/common/config.h:
+	  Release 1.4.3
+
+2014-09-24 11:44:54 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/af.po:
+	* po/az.po:
+	* po/bg.po:
+	* po/ca.po:
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/el.po:
+	* po/en_GB.po:
+	* po/eo.po:
+	* po/es.po:
+	* po/eu.po:
+	* po/fi.po:
+	* po/fr.po:
+	* po/gl.po:
+	* po/hr.po:
+	* po/hu.po:
+	* po/id.po:
+	* po/it.po:
+	* po/ja.po:
+	* po/ky.po:
+	* po/lt.po:
+	* po/lv.po:
+	* po/mt.po:
+	* po/nb.po:
+	* po/nl.po:
+	* po/or.po:
+	* po/pl.po:
+	* po/pt_BR.po:
+	* po/ro.po:
+	* po/ru.po:
+	* po/sk.po:
+	* po/sl.po:
+	* po/sq.po:
+	* po/sr.po:
+	* po/sv.po:
+	* po/tr.po:
+	* po/uk.po:
+	* po/vi.po:
+	* po/zh_CN.po:
+	  Update .po files
 
 2014-09-19 09:54:11 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
 
diff --git a/Makefile.in b/Makefile.in
index e89b803..7fb4b46 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -97,7 +97,7 @@
 	$(top_srcdir)/configure $(am__configure_deps) \
 	$(srcdir)/config.h.in $(srcdir)/gst-plugins-bad.spec.in \
 	ABOUT-NLS COPYING COPYING.LIB compile config.guess \
-	config.rpath config.sub depcomp install-sh missing ltmain.sh
+	config.rpath config.sub install-sh missing ltmain.sh
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
diff --git a/NEWS b/NEWS
index e5094d7..ee09ad6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,2 +1,2 @@
-This is GStreamer Bad Plugins 1.4.3
+This is GStreamer Bad Plugins 1.4.4
 
diff --git a/RELEASE b/RELEASE
index 2d82389..a210988 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,5 +1,5 @@
 
-Release notes for GStreamer Bad Plugins 1.4.3
+Release notes for GStreamer Bad Plugins 1.4.4
 
 The GStreamer team is pleased to announce a bugfix release of the stable
 1.4 release series. The 1.4 release series is adding new features on top
@@ -24,6 +24,7 @@
 risky as a bugfix.
 
 
+
 "That an accusation?"
 
 
@@ -72,7 +73,29 @@
 
 Bugs fixed in this release
      
-      * 736951 : vc1parse: initialize sent_codec_tag before using it
+      * 732239 : h264parse: expose parsed profiles to downstream
+      * 733510 : gltransformation produced black screen
+      * 734156 : androidmedia: doesn't calculate framesize for COLOR_FormatYUV420Planar correctly
+      * 736319 : dashdemux: mark first buffer as discont after restarting a download task
+      * 737186 : h264parse: Return flushing if we get chained while being set to READY
+      * 737569 : tsdemux: valid data is discarded if PES start packet is the first packet after discontinuity
+      * 737658 : fluiddec: segmentation fault when used with fakesrc
+      * 737724 : vc1parse: unref caps when it is empty in renegotiate()
+      * 738067 : gl: Downloading YUY2 is broken and creates blocky artefacts
+      * 738223 : fluiddec: leaks memory in gst_fluid_dec_change_state()
+      * 738230 : vc1parser: fix level value for simple/main profile
+      * 738243 : vc1parse: fix framesize when input is frame-layer
+      * 738291 : fluiddec: leaks incoming caps event
+      * 738449 : vc1parse: just assume none header-format when no codec_data is present
+      * 738519 : vc1parse: parse frame header when stream format is ASF/raw for simple/main profile
+      * 738532 : vc1parse: select caps according to wmv format at negotiation
+      * 738674 : rtmpsink: leaking URI string
+      * 738695 : mpegtsbase: do not remove programs on EOS
+      * 738696 : hlsdemux: send missing stream start
+      * 739277 : GstGLFilter propose allocation pass uninitialized size to gst_query_add_allocation_pool
+      * 739348 : configure.ac: auto decision to include GL library fails
+      * 739368 : gl: small memory leak in gl shader
+      * 739374 : h264parse: sets srccaps too often
 
 ==== Download ====
 
@@ -109,5 +132,23 @@
         
 Contributors to this release
     
+      * Antonio Ospite
       * Aurélien Zanelli
+      * Edward Hervey
+      * Havard Graff
+      * Jesper Larsen
+      * Julien Isorce
+      * Lubosz Sarnecki
+      * Luis de Bethencourt
+      * Matej Knopp
+      * Matthew Waters
+      * Matthieu Bouron
+      * Sebastian Dröge
+      * Sreerenj Balachandran
+      * Thiago Santos
+      * Thibault Saunier
+      * Tim-Philipp Müller
+      * Vincent Abriou
+      * Vivia Nikolaidou
+      * Vootele Vesterblom
  
\ No newline at end of file
diff --git a/aclocal.m4 b/aclocal.m4
index c10e19b..cc915e4 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -103,10 +103,9 @@
 # configured tree to be moved without reconfiguration.
 
 AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 ])
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
diff --git a/config.h.in b/config.h.in
index 98e266b..47931d7 100644
--- a/config.h.in
+++ b/config.h.in
@@ -544,6 +544,9 @@
 /* Define if building with VideoToolbox */
 #undef HAVE_VIDEOTOOLBOX
 
+/* Define if building with VideoToolbox >= 10.9.6 */
+#undef HAVE_VIDEOTOOLBOX_10_9_6
+
 /* Define to enable vo-aacenc library (used by vo-aacenc). */
 #undef HAVE_VOAACENC
 
diff --git a/config.sub b/config.sub
index d654d03..bba4efb 100755
--- a/config.sub
+++ b/config.sub
@@ -2,7 +2,7 @@
 # Configuration validation subroutine script.
 #   Copyright 1992-2014 Free Software Foundation, Inc.
 
-timestamp='2014-05-01'
+timestamp='2014-09-11'
 
 # 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
@@ -302,6 +302,7 @@
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
+	| riscv32 | riscv64 \
 	| rl78 | rx \
 	| score \
 	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
@@ -828,6 +829,10 @@
 		basic_machine=powerpc-unknown
 		os=-morphos
 		;;
+	moxiebox)
+		basic_machine=moxie-unknown
+		os=-moxiebox
+		;;
 	msdos)
 		basic_machine=i386-pc
 		os=-msdos
@@ -1373,7 +1378,7 @@
 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
 	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
diff --git a/configure b/configure
index d9225c5..422ae0f 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.4.3.
+# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 1.4.4.
 #
 # 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.4.3'
-PACKAGE_STRING='GStreamer Bad Plug-ins 1.4.3'
+PACKAGE_VERSION='1.4.4'
+PACKAGE_STRING='GStreamer Bad Plug-ins 1.4.4'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -2528,7 +2528,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.4.3 to adapt to many kinds of systems.
+\`configure' configures GStreamer Bad Plug-ins 1.4.4 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -2603,7 +2603,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.4.3:";;
+     short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.4.4:";;
    esac
   cat <<\_ACEOF
 
@@ -3217,7 +3217,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer Bad Plug-ins configure 1.4.3
+GStreamer Bad Plug-ins configure 1.4.4
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -4190,7 +4190,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.4.3, which was
+It was created by GStreamer Bad Plug-ins $as_me 1.4.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4858,8 +4858,8 @@
 ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
 program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
 
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
 if test x"${MISSING+set}" != xset; then
   case $am_aux_dir in
@@ -5172,7 +5172,7 @@
 
 # Define the identity of the package.
  PACKAGE='gst-plugins-bad'
- VERSION='1.4.3'
+ VERSION='1.4.4'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -5383,9 +5383,9 @@
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 1.4.3 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 1.4.3 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 1.4.3 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 1.4.4 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.4.4 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.4.4 | cut -d'.' -f3)
 
 
 
@@ -5396,7 +5396,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.4.3 | cut -d'.' -f4)
+  NANO=$(echo 1.4.4 | cut -d'.' -f4)
 
   if test x"$NANO" = x || test "x$NANO" = "x0" ; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -10053,10 +10053,10 @@
 done
 
 
-  GST_CURRENT=403
+  GST_CURRENT=404
   GST_REVISION=0
-  GST_AGE=403
-  GST_LIBVERSION=403:0:403
+  GST_AGE=404
+  GST_LIBVERSION=404:0:404
 
 
 
@@ -26670,12 +26670,12 @@
         pkg_cv_GRAPHENE_CFLAGS="$GRAPHENE_CFLAGS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"graphene-1.0\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "graphene-1.0") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"graphene-1.0 >= 1.0.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "graphene-1.0 >= 1.0.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GRAPHENE_CFLAGS=`$PKG_CONFIG --cflags "graphene-1.0" 2>/dev/null`
+  pkg_cv_GRAPHENE_CFLAGS=`$PKG_CONFIG --cflags "graphene-1.0 >= 1.0.0" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -26688,12 +26688,12 @@
         pkg_cv_GRAPHENE_LIBS="$GRAPHENE_LIBS"
     else
         if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"graphene-1.0\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "graphene-1.0") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"graphene-1.0 >= 1.0.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "graphene-1.0 >= 1.0.0") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GRAPHENE_LIBS=`$PKG_CONFIG --libs "graphene-1.0" 2>/dev/null`
+  pkg_cv_GRAPHENE_LIBS=`$PKG_CONFIG --libs "graphene-1.0 >= 1.0.0" 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -26712,9 +26712,9 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        GRAPHENE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "graphene-1.0"`
+	        GRAPHENE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "graphene-1.0 >= 1.0.0"`
         else
-	        GRAPHENE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "graphene-1.0"`
+	        GRAPHENE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "graphene-1.0 >= 1.0.0"`
         fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$GRAPHENE_PKG_ERRORS" >&5
@@ -31986,6 +31986,21 @@
 
 
 
+if test "x$HAVE_VIDEOTOOLBOX" = "xyes"; then
+  old_LIBS=$LIBS
+  LIBS="$LIBS -framework VideoToolbox"
+  ac_fn_c_check_func "$LINENO" "VTCompressionSessionPrepareToEncodeFrames" "ac_cv_func_VTCompressionSessionPrepareToEncodeFrames"
+if test "x$ac_cv_func_VTCompressionSessionPrepareToEncodeFrames" = xyes; then :
+
+
+$as_echo "#define HAVE_VIDEOTOOLBOX_10_9_6 1" >>confdefs.h
+
+
+fi
+
+  LIBS=$old_LIBS
+fi
+
  if test "x$HAVE_AVFOUNDATION" = "xyes"; then
   HAVE_AVFOUNDATION_TRUE=
   HAVE_AVFOUNDATION_FALSE='#'
@@ -32014,39 +32029,6 @@
 
 fi
 
-if test "x$HAVE_IOS" = "xyes"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking Checking for __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0" >&5
-$as_echo_n "checking Checking for __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0... " >&6; }
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <AvailabilityMacros.h>
-int
-main ()
-{
-
-        #if !defined(__IPHONE_OS_VERSION_MIN_REQUIRED) || __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
-        #error "Need iOS >= 8.0 for VideoToolbox"
-        #endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    HAVE_VIDEOTOOLBOX="yes"
-
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-    HAVE_VIDEOTOOLBOX="no"
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
  if test "x$HAVE_VIDEOTOOLBOX" = "xyes"; then
   HAVE_VIDEOTOOLBOX_TRUE=
   HAVE_VIDEOTOOLBOX_FALSE='#'
@@ -33931,6 +33913,10 @@
 # if __APPLE__
 #  include <OpenGL/OpenGL.h>
 #  include <OpenGL/gl.h>
+#  if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
+#   define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
+#   include <OpenGL/gl3.h>
+#  endif
 #  include <OpenGL/glu.h>
 # else
 #  include <GL/gl.h>
@@ -33972,7 +33958,7 @@
       fi
       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling Desktop GL support" >&5
 $as_echo "$as_me: WARNING: Disabling Desktop GL support" >&2;}
-      HAVE_OPENGL=no
+      HAVE_GL=no
     else
       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling GL|ES 2.0 support" >&5
 $as_echo "$as_me: WARNING: Disabling GL|ES 2.0 support" >&2;}
@@ -56339,7 +56325,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.4.3, which was
+This file was extended by GStreamer Bad Plug-ins $as_me 1.4.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -56405,7 +56391,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.4.3
+GStreamer Bad Plug-ins config.status 1.4.4
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index e5216b5..96d2f52 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, cvs and prerelease does Werror too
-AC_INIT([GStreamer Bad Plug-ins],[1.4.3],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
+AC_INIT([GStreamer Bad Plug-ins],[1.4.4],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
 
 AG_GST_INIT
 
@@ -48,7 +48,7 @@
 dnl - interfaces added -> increment AGE
 dnl - interfaces removed -> AGE = 0
 dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 403, 0, 403)
+AS_LIBTOOL(GST, 404, 0, 404)
 
 dnl *** required versions of GStreamer stuff ***
 GST_REQ=1.4.0
@@ -286,7 +286,7 @@
 
 dnl graphene-1.0 is optional and used in gltransformation
 HAVE_GRAPHENE=NO
-PKG_CHECK_MODULES(GRAPHENE, graphene-1.0, HAVE_GRAPHENE=yes, HAVE_GRAPHENE=no)
+PKG_CHECK_MODULES(GRAPHENE, graphene-1.0 >= 1.0.0, HAVE_GRAPHENE=yes, HAVE_GRAPHENE=no)
 if test "x$HAVE_GRAPHENE" = "xyes"; then
   AC_DEFINE(HAVE_GRAPHENE, [1] , [Use graphene])
 fi
@@ -503,6 +503,16 @@
 AC_CHECK_HEADER(MobileCoreServices/MobileCoreServices.h, HAVE_IOS="yes", HAVE_IOS="no", [-])
 AC_CHECK_HEADER(VideoToolbox/VideoToolbox.h, HAVE_VIDEOTOOLBOX="yes", HAVE_VIDEOTOOLBOX="no", [-])
 
+if test "x$HAVE_VIDEOTOOLBOX" = "xyes"; then
+  old_LIBS=$LIBS
+  LIBS="$LIBS -framework VideoToolbox"
+  AC_CHECK_FUNC(VTCompressionSessionPrepareToEncodeFrames, [
+    AC_DEFINE(HAVE_VIDEOTOOLBOX_10_9_6, 1, [Define if building with VideoToolbox >= 10.9.6])
+  ], [
+  ])
+  LIBS=$old_LIBS
+fi
+
 AM_CONDITIONAL(HAVE_AVFOUNDATION, test "x$HAVE_AVFOUNDATION" = "xyes")
 if test "x$HAVE_AVFOUNDATION" = "xyes"; then
   AC_DEFINE(HAVE_AVFOUNDATION, 1, [Define if building with AVFoundation])
@@ -513,20 +523,6 @@
   AC_DEFINE(HAVE_IOS, 1, [Define if building for Apple iOS])
 fi
 
-if test "x$HAVE_IOS" = "xyes"; then
-  AC_MSG_CHECKING([Checking for __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0])
-
-  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <AvailabilityMacros.h>]], [[
-        #if !defined(__IPHONE_OS_VERSION_MIN_REQUIRED) || __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
-        #error "Need iOS >= 8.0 for VideoToolbox"
-        #endif
-  ]])], [ AC_MSG_RESULT(yes)
-    HAVE_VIDEOTOOLBOX="yes"
-  ], [ AC_MSG_RESULT(no)
-    HAVE_VIDEOTOOLBOX="no"
-  ])
-fi
-
 AM_CONDITIONAL(HAVE_VIDEOTOOLBOX, test "x$HAVE_VIDEOTOOLBOX" = "xyes")
 if test "x$HAVE_VIDEOTOOLBOX" = "xyes"; then
   AC_DEFINE(HAVE_VIDEOTOOLBOX, 1, [Define if building with VideoToolbox])
@@ -861,6 +857,10 @@
 # if __APPLE__
 #  include <OpenGL/OpenGL.h>
 #  include <OpenGL/gl.h>
+#  if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
+#   define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
+#   include <OpenGL/gl3.h>
+#  endif
 #  include <OpenGL/glu.h>
 # else
 #  include <GL/gl.h>
@@ -884,7 +884,7 @@
         AC_MSG_ERROR([Cannot seem to include both GL and GLES2 headers. Try disabling one API])
       fi
       AC_MSG_WARN([Disabling Desktop GL support])
-      HAVE_OPENGL=no
+      HAVE_GL=no
     else
       AC_MSG_WARN([Disabling GL|ES 2.0 support])
       HAVE_GLES2=no
diff --git a/docs/libs/gst-plugins-bad-libs-sections.txt b/docs/libs/gst-plugins-bad-libs-sections.txt
index d07f6d6..632d9d6 100644
--- a/docs/libs/gst-plugins-bad-libs-sections.txt
+++ b/docs/libs/gst-plugins-bad-libs-sections.txt
@@ -831,6 +831,8 @@
 gst_gl_context_get_gl_api
 gst_gl_context_get_gl_context
 gst_gl_context_get_gl_platform
+gst_gl_context_get_thread
+gst_gl_context_can_share
 gst_gl_context_check_feature
 gst_gl_context_check_gl_version
 gst_gl_context_get_gl_version
diff --git a/docs/libs/html/GstGLColorConvert.html b/docs/libs/html/GstGLColorConvert.html
index 6c42b8d..7249954 100644
--- a/docs/libs/html/GstGLColorConvert.html
+++ b/docs/libs/html/GstGLColorConvert.html
@@ -116,6 +116,26 @@
 <a name="gst-gl-color-convert-new"></a><h3>gst_gl_color_convert_new ()</h3>
 <pre class="programlisting"><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="returnvalue">GstGLColorConvert</span></a> *
 gst_gl_color_convert_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.4.7.2.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.4.7.2.5"></a><h4>Returns</h4>
+<p> a new <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> object</p>
+<p></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
diff --git a/docs/libs/html/GstGLContext.html b/docs/libs/html/GstGLContext.html
index 1d26f5c..ba85f88 100644
--- a/docs/libs/html/GstGLContext.html
+++ b/docs/libs/html/GstGLContext.html
@@ -166,6 +166,22 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Threads.html#GThread"><span class="returnvalue">GThread</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GstGLContext.html#gst-gl-context-get-thread" title="gst_gl_context_get_thread ()">gst_gl_context_get_thread</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLContext.html#gst-gl-context-can-share" title="gst_gl_context_can_share ()">gst_gl_context_can_share</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 </td>
 <td class="function_name">
@@ -296,6 +312,7 @@
 <p> a new <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -346,6 +363,7 @@
 </p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -394,6 +412,7 @@
 <p> whether the context could successfully be created</p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -432,6 +451,7 @@
 <p> Whether the activation succeeded</p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -479,6 +499,7 @@
 <p> a function pointer or NULL</p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -505,6 +526,7 @@
 <p> the currently set window</p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -545,6 +567,7 @@
 <p> Whether the window was successfully updated</p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -586,6 +609,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -613,6 +637,7 @@
 </p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -639,9 +664,10 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.9.5.7.15.7"></a><h4>Returns</h4>
-<p> the currently available OpenGL api</p>
+<p> the available OpenGL api</p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -670,6 +696,7 @@
 <p> The platform specific backing OpenGL context</p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -698,6 +725,73 @@
 <p> The platform specific backing OpenGL context</p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-context-get-thread"></a><h3>gst_gl_context_get_thread ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Threads.html#GThread"><span class="returnvalue">GThread</span></a> *
+gst_gl_context_get_thread (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.5.7.18.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.5.7.18.5"></a><h4>Returns</h4>
+<p> The <a href="https://developer.gnome.org/glib/unstable/glib-Threads.html#GThread"><span class="type">GThread</span></a>, <em class="parameter"><code>context</code></em>
+is current in or NULL. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
+</div>
+<p class="since">Since 1.4.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-context-can-share"></a><h3>gst_gl_context_can_share ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_context_can_share (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+                          <em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *other_context</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.9.5.7.19.4"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>other_context</p></td>
+<td class="parameter_description"><p>another <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.5.7.19.5"></a><h4>Returns</h4>
+<p> whether <em class="parameter"><code>context</code></em>
+and <em class="parameter"><code>other_context</code></em>
+are able to share OpenGL
+resources.</p>
+<p></p>
+</div>
+<p class="since">Since 1.6</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -708,7 +802,7 @@
 <p>Some features require that the context be created before it is possible to
 determine their existence and so will fail if that is not the case.</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.18.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.5.7.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -730,12 +824,13 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.18.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.5.7.20.6"></a><h4>Returns</h4>
 <p> Whether <em class="parameter"><code>feature</code></em>
 is supported by <em class="parameter"><code>context</code></em>
 </p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -746,7 +841,7 @@
                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> maj</code></em>,
                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> min</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.19.4"></a><h4>Parameters</h4>
+<a name="id-1.2.9.5.7.21.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -778,11 +873,12 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.19.5"></a><h4>Returns</h4>
+<a name="id-1.2.9.5.7.21.5"></a><h4>Returns</h4>
 <p> whether OpenGL context implements the required api and specified
 version.</p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -797,7 +893,7 @@
 <em class="parameter"><code>context</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.5.7.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.5.7.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -823,6 +919,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 </div>
 <div class="refsect1">
diff --git a/docs/libs/html/GstGLDisplay.html b/docs/libs/html/GstGLDisplay.html
index 31b85c6..2793f0d 100644
--- a/docs/libs/html/GstGLDisplay.html
+++ b/docs/libs/html/GstGLDisplay.html
@@ -140,6 +140,7 @@
 <p> a new <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a>. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -167,6 +168,7 @@
 </p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -203,6 +205,7 @@
 </p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -235,6 +238,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 </div>
 <div class="refsect1">
diff --git a/docs/libs/html/GstGLWindow.html b/docs/libs/html/GstGLWindow.html
index d127e82..f7d5fa0 100644
--- a/docs/libs/html/GstGLWindow.html
+++ b/docs/libs/html/GstGLWindow.html
@@ -304,6 +304,7 @@
 's connection. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -340,6 +341,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -376,6 +378,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -398,6 +401,7 @@
 </tr></tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -420,6 +424,7 @@
 </tr></tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -442,6 +447,7 @@
 </tr></tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -469,6 +475,7 @@
 . </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -496,6 +503,7 @@
 </p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -536,6 +544,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -583,6 +592,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -627,6 +637,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -671,6 +682,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -715,6 +727,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -747,6 +760,7 @@
 </tbody>
 </table></div>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -773,6 +787,7 @@
 <p> the window handle we are currently rendering into</p>
 <p></p>
 </div>
+<p class="since">Since 1.4</p>
 </div>
 </div>
 <div class="refsect1">
diff --git a/docs/libs/html/api-index-full.html b/docs/libs/html/api-index-full.html
index a612e56..cc30082 100644
--- a/docs/libs/html/api-index-full.html
+++ b/docs/libs/html/api-index-full.html
@@ -144,7 +144,7 @@
 <dd></dd>
 <a name="idxC"></a><h3 class="title">C</h3>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/gst-plugins-bad-plugins-camerabin.html#GstCameraBinMode">GstCameraBinMode</a>, enum in gstcamerabin-enum
+GstCameraBinMode, enum in gstcamerabin-enum
 </dt>
 <dd></dd>
 <dt>
@@ -571,6 +571,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstGLContext.html#gst-gl-context-can-share" title="gst_gl_context_can_share ()">gst_gl_context_can_share</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstGLContext.html#gst-gl-context-check-feature" title="gst_gl_context_check_feature ()">gst_gl_context_check_feature</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
 </dt>
 <dd></dd>
@@ -663,6 +667,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="GstGLContext.html#gst-gl-context-get-thread" title="gst_gl_context_get_thread ()">gst_gl_context_get_thread</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="GstGLContext.html#gst-gl-context-get-window" title="gst_gl_context_get_window ()">gst_gl_context_get_window</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
 </dt>
 <dd></dd>
@@ -2315,39 +2323,39 @@
 <dd></dd>
 <a name="idxP"></a><h3 class="title">P</h3>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html">GstPhotography</a>, struct in gstphotography
+GstPhotography, struct in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#GstPhotographyNoiseReduction">GstPhotographyNoiseReduction</a>, enum in gstphotography
+GstPhotographyNoiseReduction, enum in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#GST-PHOTOGRAPHY-AUTOFOCUS-DONE:CAPS">GST_PHOTOGRAPHY_AUTOFOCUS_DONE</a>, macro in gstphotography
+GST_PHOTOGRAPHY_AUTOFOCUS_DONE, macro in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-aperture">gst_photography_get_aperture</a>, function in gstphotography
+gst_photography_get_aperture, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-capabilities">gst_photography_get_capabilities</a>, function in gstphotography
+gst_photography_get_capabilities, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-config">gst_photography_get_config</a>, function in gstphotography
+gst_photography_get_config, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-ev-compensation">gst_photography_get_ev_compensation</a>, function in gstphotography
+gst_photography_get_ev_compensation, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-exposure">gst_photography_get_exposure</a>, function in gstphotography
+gst_photography_get_exposure, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-flash-mode">gst_photography_get_flash_mode</a>, function in gstphotography
+gst_photography_get_flash_mode, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
@@ -2359,23 +2367,23 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-iso-speed">gst_photography_get_iso_speed</a>, function in gstphotography
+gst_photography_get_iso_speed, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-noise-reduction">gst_photography_get_noise_reduction</a>, function in gstphotography
+gst_photography_get_noise_reduction, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-scene-mode">gst_photography_get_scene_mode</a>, function in gstphotography
+gst_photography_get_scene_mode, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-white-balance-mode">gst_photography_get_white_balance_mode</a>, function in gstphotography
+gst_photography_get_white_balance_mode, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-get-zoom">gst_photography_get_zoom</a>, function in gstphotography
+gst_photography_get_zoom, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
@@ -2383,7 +2391,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-prepare-for-capture">gst_photography_prepare_for_capture</a>, function in gstphotography
+gst_photography_prepare_for_capture, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
@@ -2447,27 +2455,27 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-aperture">gst_photography_set_aperture</a>, function in gstphotography
+gst_photography_set_aperture, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-autofocus">gst_photography_set_autofocus</a>, function in gstphotography
+gst_photography_set_autofocus, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-config">gst_photography_set_config</a>, function in gstphotography
+gst_photography_set_config, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-ev-compensation">gst_photography_set_ev_compensation</a>, function in gstphotography
+gst_photography_set_ev_compensation, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-exposure">gst_photography_set_exposure</a>, function in gstphotography
+gst_photography_set_exposure, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-flash-mode">gst_photography_set_flash_mode</a>, function in gstphotography
+gst_photography_set_flash_mode, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
@@ -2479,27 +2487,27 @@
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-iso-speed">gst_photography_set_iso_speed</a>, function in gstphotography
+gst_photography_set_iso_speed, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-noise-reduction">gst_photography_set_noise_reduction</a>, function in gstphotography
+gst_photography_set_noise_reduction, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-scene-mode">gst_photography_set_scene_mode</a>, function in gstphotography
+gst_photography_set_scene_mode, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-white-balance-mode">gst_photography_set_white_balance_mode</a>, function in gstphotography
+gst_photography_set_white_balance_mode, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#gst-photography-set-zoom">gst_photography_set_zoom</a>, function in gstphotography
+gst_photography_set_zoom, function in gstphotography
 </dt>
 <dd></dd>
 <dt>
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#GST-PHOTOGRAPHY-SHAKE-RISK:CAPS">GST_PHOTOGRAPHY_SHAKE_RISK</a>, macro in gstphotography
+GST_PHOTOGRAPHY_SHAKE_RISK, macro in gstphotography
 </dt>
 <dd></dd>
 <dt>
diff --git a/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2 b/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
index 40f2bc8..628a54c 100644
--- a/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
+++ b/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
@@ -418,22 +418,24 @@
     <keyword type="macro" name="GST_GL_CONTEXT_ERROR" link="GstGLContext.html#GST-GL-CONTEXT-ERROR:CAPS"/>
     <keyword type="function" name="gst_gl_context_error_quark ()" link="GstGLContext.html#gst-gl-context-error-quark"/>
     <keyword type="function" name="GstGLContextThreadFunc ()" link="GstGLContext.html#GstGLContextThreadFunc"/>
-    <keyword type="function" name="gst_gl_context_new ()" link="GstGLContext.html#gst-gl-context-new"/>
-    <keyword type="function" name="gst_gl_context_new_wrapped ()" link="GstGLContext.html#gst-gl-context-new-wrapped"/>
-    <keyword type="function" name="gst_gl_context_create ()" link="GstGLContext.html#gst-gl-context-create"/>
-    <keyword type="function" name="gst_gl_context_activate ()" link="GstGLContext.html#gst-gl-context-activate"/>
+    <keyword type="function" name="gst_gl_context_new ()" link="GstGLContext.html#gst-gl-context-new" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_new_wrapped ()" link="GstGLContext.html#gst-gl-context-new-wrapped" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_create ()" link="GstGLContext.html#gst-gl-context-create" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_activate ()" link="GstGLContext.html#gst-gl-context-activate" since="1.4"/>
     <keyword type="function" name="gst_gl_context_default_get_proc_address ()" link="GstGLContext.html#gst-gl-context-default-get-proc-address"/>
-    <keyword type="function" name="gst_gl_context_get_proc_address ()" link="GstGLContext.html#gst-gl-context-get-proc-address"/>
-    <keyword type="function" name="gst_gl_context_get_window ()" link="GstGLContext.html#gst-gl-context-get-window"/>
-    <keyword type="function" name="gst_gl_context_set_window ()" link="GstGLContext.html#gst-gl-context-set-window"/>
-    <keyword type="function" name="gst_gl_context_thread_add ()" link="GstGLContext.html#gst-gl-context-thread-add"/>
-    <keyword type="function" name="gst_gl_context_get_display ()" link="GstGLContext.html#gst-gl-context-get-display"/>
-    <keyword type="function" name="gst_gl_context_get_gl_api ()" link="GstGLContext.html#gst-gl-context-get-gl-api"/>
-    <keyword type="function" name="gst_gl_context_get_gl_context ()" link="GstGLContext.html#gst-gl-context-get-gl-context"/>
-    <keyword type="function" name="gst_gl_context_get_gl_platform ()" link="GstGLContext.html#gst-gl-context-get-gl-platform"/>
-    <keyword type="function" name="gst_gl_context_check_feature ()" link="GstGLContext.html#gst-gl-context-check-feature"/>
-    <keyword type="function" name="gst_gl_context_check_gl_version ()" link="GstGLContext.html#gst-gl-context-check-gl-version"/>
-    <keyword type="function" name="gst_gl_context_get_gl_version ()" link="GstGLContext.html#gst-gl-context-get-gl-version"/>
+    <keyword type="function" name="gst_gl_context_get_proc_address ()" link="GstGLContext.html#gst-gl-context-get-proc-address" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_get_window ()" link="GstGLContext.html#gst-gl-context-get-window" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_set_window ()" link="GstGLContext.html#gst-gl-context-set-window" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_thread_add ()" link="GstGLContext.html#gst-gl-context-thread-add" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_get_display ()" link="GstGLContext.html#gst-gl-context-get-display" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_get_gl_api ()" link="GstGLContext.html#gst-gl-context-get-gl-api" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_get_gl_context ()" link="GstGLContext.html#gst-gl-context-get-gl-context" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_get_gl_platform ()" link="GstGLContext.html#gst-gl-context-get-gl-platform" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_get_thread ()" link="GstGLContext.html#gst-gl-context-get-thread" since="1.4.5"/>
+    <keyword type="function" name="gst_gl_context_can_share ()" link="GstGLContext.html#gst-gl-context-can-share" since="1.6"/>
+    <keyword type="function" name="gst_gl_context_check_feature ()" link="GstGLContext.html#gst-gl-context-check-feature" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_check_gl_version ()" link="GstGLContext.html#gst-gl-context-check-gl-version" since="1.4"/>
+    <keyword type="function" name="gst_gl_context_get_gl_version ()" link="GstGLContext.html#gst-gl-context-get-gl-version" since="1.4"/>
     <keyword type="enum" name="enum GstGLContextError" link="GstGLContext.html#GstGLContextError"/>
     <keyword type="struct" name="GstGLContext" link="GstGLContext.html#GstGLContext-struct"/>
     <keyword type="function" name="gst_gl_context_cocoa_new ()" link="gst-plugins-bad-libs-GstGLContextCocoa.html#gst-gl-context-cocoa-new"/>
@@ -444,10 +446,10 @@
     <keyword type="struct" name="struct GstGLContextGLX" link="gst-plugins-bad-libs-GstGLContextGLX.html#GstGLContextGLX"/>
     <keyword type="function" name="gst_gl_context_wgl_new ()" link="gst-plugins-bad-libs-GstGLContextWGL.html#gst-gl-context-wgl-new"/>
     <keyword type="struct" name="struct GstGLContextWGL" link="gst-plugins-bad-libs-GstGLContextWGL.html#GstGLContextWGL"/>
-    <keyword type="function" name="gst_gl_display_new ()" link="GstGLDisplay.html#gst-gl-display-new"/>
-    <keyword type="function" name="gst_gl_display_get_handle_type ()" link="GstGLDisplay.html#gst-gl-display-get-handle-type"/>
-    <keyword type="function" name="gst_context_get_gl_display ()" link="GstGLDisplay.html#gst-context-get-gl-display"/>
-    <keyword type="function" name="gst_context_set_gl_display ()" link="GstGLDisplay.html#gst-context-set-gl-display"/>
+    <keyword type="function" name="gst_gl_display_new ()" link="GstGLDisplay.html#gst-gl-display-new" since="1.4"/>
+    <keyword type="function" name="gst_gl_display_get_handle_type ()" link="GstGLDisplay.html#gst-gl-display-get-handle-type" since="1.4"/>
+    <keyword type="function" name="gst_context_get_gl_display ()" link="GstGLDisplay.html#gst-context-get-gl-display" since="1.4"/>
+    <keyword type="function" name="gst_context_set_gl_display ()" link="GstGLDisplay.html#gst-context-set-gl-display" since="1.4"/>
     <keyword type="macro" name="GST_GL_DISPLAY_CONTEXT_TYPE" link="GstGLDisplay.html#GST-GL-DISPLAY-CONTEXT-TYPE:CAPS"/>
     <keyword type="enum" name="enum GstGLDisplayType" link="GstGLDisplay.html#GstGLDisplayType"/>
     <keyword type="struct" name="GstGLDisplay" link="GstGLDisplay.html#GstGLDisplay-struct"/>
@@ -590,21 +592,21 @@
     <keyword type="macro" name="GST_GL_WINDOW_RESIZE_CB()" link="GstGLWindow.html#GST-GL-WINDOW-RESIZE-CB:CAPS"/>
     <keyword type="function" name="GstGLWindowCB ()" link="GstGLWindow.html#GstGLWindowCB"/>
     <keyword type="macro" name="GST_GL_WINDOW_CB()" link="GstGLWindow.html#GST-GL-WINDOW-CB:CAPS"/>
-    <keyword type="function" name="gst_gl_window_new ()" link="GstGLWindow.html#gst-gl-window-new"/>
-    <keyword type="function" name="gst_gl_window_draw ()" link="GstGLWindow.html#gst-gl-window-draw"/>
-    <keyword type="function" name="gst_gl_window_draw_unlocked ()" link="GstGLWindow.html#gst-gl-window-draw-unlocked"/>
-    <keyword type="function" name="gst_gl_window_is_running ()" link="GstGLWindow.html#gst-gl-window-is-running"/>
-    <keyword type="function" name="gst_gl_window_quit ()" link="GstGLWindow.html#gst-gl-window-quit"/>
-    <keyword type="function" name="gst_gl_window_run ()" link="GstGLWindow.html#gst-gl-window-run"/>
-    <keyword type="function" name="gst_gl_window_get_context ()" link="GstGLWindow.html#gst-gl-window-get-context"/>
-    <keyword type="function" name="gst_gl_window_get_display ()" link="GstGLWindow.html#gst-gl-window-get-display"/>
-    <keyword type="function" name="gst_gl_window_send_message ()" link="GstGLWindow.html#gst-gl-window-send-message"/>
-    <keyword type="function" name="gst_gl_window_send_message_async ()" link="GstGLWindow.html#gst-gl-window-send-message-async"/>
-    <keyword type="function" name="gst_gl_window_set_close_callback ()" link="GstGLWindow.html#gst-gl-window-set-close-callback"/>
-    <keyword type="function" name="gst_gl_window_set_draw_callback ()" link="GstGLWindow.html#gst-gl-window-set-draw-callback"/>
-    <keyword type="function" name="gst_gl_window_set_resize_callback ()" link="GstGLWindow.html#gst-gl-window-set-resize-callback"/>
-    <keyword type="function" name="gst_gl_window_set_window_handle ()" link="GstGLWindow.html#gst-gl-window-set-window-handle"/>
-    <keyword type="function" name="gst_gl_window_get_window_handle ()" link="GstGLWindow.html#gst-gl-window-get-window-handle"/>
+    <keyword type="function" name="gst_gl_window_new ()" link="GstGLWindow.html#gst-gl-window-new" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_draw ()" link="GstGLWindow.html#gst-gl-window-draw" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_draw_unlocked ()" link="GstGLWindow.html#gst-gl-window-draw-unlocked" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_is_running ()" link="GstGLWindow.html#gst-gl-window-is-running" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_quit ()" link="GstGLWindow.html#gst-gl-window-quit" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_run ()" link="GstGLWindow.html#gst-gl-window-run" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_get_context ()" link="GstGLWindow.html#gst-gl-window-get-context" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_get_display ()" link="GstGLWindow.html#gst-gl-window-get-display" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_send_message ()" link="GstGLWindow.html#gst-gl-window-send-message" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_send_message_async ()" link="GstGLWindow.html#gst-gl-window-send-message-async" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_set_close_callback ()" link="GstGLWindow.html#gst-gl-window-set-close-callback" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_set_draw_callback ()" link="GstGLWindow.html#gst-gl-window-set-draw-callback" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_set_resize_callback ()" link="GstGLWindow.html#gst-gl-window-set-resize-callback" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_set_window_handle ()" link="GstGLWindow.html#gst-gl-window-set-window-handle" since="1.4"/>
+    <keyword type="function" name="gst_gl_window_get_window_handle ()" link="GstGLWindow.html#gst-gl-window-get-window-handle" since="1.4"/>
     <keyword type="enum" name="enum GstGLWindowError" link="GstGLWindow.html#GstGLWindowError"/>
     <keyword type="struct" name="GstGLWindow" link="GstGLWindow.html#GstGLWindow-struct"/>
     <keyword type="struct" name="GstGLWindowClass" link="GstGLWindow.html#GstGLWindowClass"/>
diff --git a/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html b/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html
index 1589564..e1b61e6 100644
--- a/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html
+++ b/docs/libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html
@@ -549,7 +549,7 @@
 gst_mpegts_section_from_pat (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *programs</code></em>,
                              <em class="parameter"><code><span class="type">guint16</span> ts_id</code></em>);</pre>
 <p>Creates a PAT <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsSection"><span class="type">GstMpegtsSection</span></a> from the <em class="parameter"><code>programs</code></em>
- array of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram"><span class="type">GstMpegtsPatPrograms</span></a></p>
+ array of <a href="../gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegtsPatProgram"><span class="type">GstMpegtsPatPrograms</span></a></p>
 <div class="refsect3">
 <a name="id-1.2.5.4.9.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html b/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html
index 81ff32e..9df5eb6 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstAggregator.html
@@ -390,7 +390,7 @@
 <td class="struct_member_description"><p>Mandatory.
 Called when buffers are queued on all sinkpads. Classes
 should iterate the GstElement-&gt;sinkpads and peek or steal
-buffers from the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad"><span class="type">GstAggregatorPads</span></a>. If the subclass returns
+buffers from the <a href="../gst-plugins-bad-libs-1.0/gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad"><span class="type">GstAggregatorPads</span></a>. If the subclass returns
 GST_FLOW_EOS, sending of the eos event will be taken care
 of. Once / if a buffer has been constructed from the
 aggregated buffers, the subclass should call _finish_buffer.</p></td>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowCocoa.html b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowCocoa.html
index 62ff5ef..dea1162 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLWindowCocoa.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLWindowCocoa.html
@@ -91,7 +91,8 @@
 <div class="refsect2">
 <a name="gst-gl-window-cocoa-create-window"></a><h3>gst_gl_window_cocoa_create_window ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_window_cocoa_create_window (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLWindowCocoa.html#GstGLWindowCocoa" title="struct GstGLWindowCocoa"><span class="type">GstGLWindowCocoa</span></a> *window_cocoa</code></em>);</pre>
+gst_gl_window_cocoa_create_window (<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-GstGLWindowCocoa.html#GstGLWindowCocoa" title="struct GstGLWindowCocoa"><span class="type">GstGLWindowCocoa</span></a> *window_cocoa</code></em>,
+                                   <em class="parameter"><code><span class="type">NSRect</span> rect</code></em>);</pre>
 </div>
 </div>
 <div class="refsect1">
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index 40de875..f529fca 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.4.3)
+      for GStreamer Bad Library 1.0 (1.4.4)
       <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/libs/html/index.sgml b/docs/libs/html/index.sgml
index 4121f08..5378adc 100644
--- a/docs/libs/html/index.sgml
+++ b/docs/libs/html/index.sgml
@@ -520,6 +520,8 @@
 <ANCHOR id="gst-gl-context-get-gl-api" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-gl-api">
 <ANCHOR id="gst-gl-context-get-gl-context" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-gl-context">
 <ANCHOR id="gst-gl-context-get-gl-platform" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-gl-platform">
+<ANCHOR id="gst-gl-context-get-thread" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-thread">
+<ANCHOR id="gst-gl-context-can-share" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-can-share">
 <ANCHOR id="gst-gl-context-check-feature" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-check-feature">
 <ANCHOR id="gst-gl-context-check-gl-version" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-check-gl-version">
 <ANCHOR id="gst-gl-context-get-gl-version" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-gl-version">
diff --git a/docs/plugins/gst-plugins-bad-plugins.hierarchy b/docs/plugins/gst-plugins-bad-plugins.hierarchy
index 6ae2f26..2df71bd 100644
--- a/docs/plugins/gst-plugins-bad-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-bad-plugins.hierarchy
@@ -3,7 +3,6 @@
     GstObject
       GstAllocator
         GstAllocatorSysmem
-        GstVdpVideoAllocator
       GstAudioRingBuffer
         GstAudioSinkRingBuffer
         GstAudioSrcRingBuffer
@@ -35,7 +34,6 @@
           GstSirenDec
         GstAudioEncoder
           ADPCMEnc
-          GstFaac
           GstGSMEnc
           GstOpusEnc
           GstSbcEnc
@@ -75,6 +73,7 @@
           GstInterAudioSink
           GstInterSubSink
           GstInterVideoSink
+          GstRTMPSink
           GstShmSink
           GstVideoSink
             GstDfbVideoSink
@@ -97,6 +96,7 @@
             GstDvbSrc
             GstGLTestSrc
             GstMMS
+            GstRTMPSrc
             GstRfbSrc
             GstShmSrc
         GstBaseTransform
@@ -277,8 +277,6 @@
           GstRsvgDec
           GstSchroDec
           GstVMncDec
-          GstVdpDecoder
-            GstVdpMpegDec
           GstWebPDec
         GstVideoEncoder
           GstOpenJPEGEnc
@@ -309,7 +307,6 @@
       GstTaskPool
   GstColorBalanceChannel
   GstEncodingProfile
-  GstVdpDevice
   MXFMetadataBase
     MXFDescriptiveMetadata
       MXFDMS1
diff --git a/docs/plugins/html/GstPhotography.html b/docs/plugins/html/GstPhotography.html
index 9d6e47a..d023224 100644
--- a/docs/plugins/html/GstPhotography.html
+++ b/docs/plugins/html/GstPhotography.html
@@ -272,7 +272,7 @@
 <td class="property_flags">Read</td>
 </tr>
 <tr>
-<td class="property_type"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#GstColourToneMode"><span class="type">GstColourToneMode</span></a></td>
+<td class="property_type"><span class="type">GstColourToneMode</span></td>
 <td class="property_name"><a class="link" href="GstPhotography.html#GstPhotography--colour-tone-mode" title="The “colour-tone-mode” property">colour-tone-mode</a></td>
 <td class="property_flags">Read / Write</td>
 </tr>
@@ -455,7 +455,7 @@
 <a name="GstPhotography.prerequisites"></a><h2>Prerequisites</h2>
 <p>
 GstPhotography requires
- <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstImplementsInterface.html">GstImplementsInterface</a> and  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>.</p>
+ GstImplementsInterface and  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>.</p>
 </div>
 <div class="refsect1">
 <a name="GstPhotography.description"></a><h2>Description</h2>
@@ -1467,7 +1467,7 @@
 <hr>
 <div class="refsect2">
 <a name="GstPhotography--colour-tone-mode"></a><h3>The <code class="literal">“colour-tone-mode”</code> property</h3>
-<pre class="programlisting">  “colour-tone-mode”         <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/GstPhotography.html#GstColourToneMode"><span class="type">GstColourToneMode</span></a></pre>
+<pre class="programlisting">  “colour-tone-mode”         <span class="type">GstColourToneMode</span></pre>
 <p>Colour tone setting changes colour shading in the photo.</p>
 <p>Flags: Read / Write</p>
 <p>Default value: GST_PHOTOGRAPHY_COLOUR_TONE_MODE_NORMAL</p>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2 b/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2
index 9eb48b5..60c2f58 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2
+++ b/docs/plugins/html/gst-plugins-bad-plugins-1.0.devhelp2
@@ -286,9 +286,9 @@
     <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-edgedetect.html#id-1.2.27.3.2.2"/>
     <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-eglglessink.html#id-1.2.28.3.2.1"/>
     <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-eglglessink.html#id-1.2.28.3.2.2"/>
-    <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faac.html#id-1.2.29.8.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faac.html#id-1.2.29.8.2.2"/>
-    <keyword type="struct" name="struct GstFaac" link="gst-plugins-bad-plugins-faac.html#GstFaac-struct"/>
+    <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faac.html#id-1.2.29.6.2.1"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faac.html#id-1.2.29.6.2.2"/>
+    <keyword type="struct" name="struct GstFaac" link="gst-plugins-bad-plugins-faac.html#GstFaac"/>
     <keyword type="property" name="The “bitrate” property" link="gst-plugins-bad-plugins-faac.html#GstFaac--bitrate"/>
     <keyword type="property" name="The “midside” property" link="gst-plugins-bad-plugins-faac.html#GstFaac--midside"/>
     <keyword type="property" name="The “outputformat” property" link="gst-plugins-bad-plugins-faac.html#GstFaac--outputformat"/>
@@ -493,13 +493,13 @@
     <keyword type="property" name="The “use-copyrect” property" link="gst-plugins-bad-plugins-rfbsrc.html#GstRfbSrc--use-copyrect"/>
     <keyword type="property" name="The “shared” property" link="gst-plugins-bad-plugins-rfbsrc.html#GstRfbSrc--shared"/>
     <keyword type="property" name="The “view-only” property" link="gst-plugins-bad-plugins-rfbsrc.html#GstRfbSrc--view-only"/>
-    <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsink.html#id-1.2.56.6.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsink.html#id-1.2.56.6.2.2"/>
-    <keyword type="struct" name="struct GstRTMPSink" link="gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink"/>
+    <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsink.html#id-1.2.56.8.2.1"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsink.html#id-1.2.56.8.2.2"/>
+    <keyword type="struct" name="struct GstRTMPSink" link="gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink-struct"/>
     <keyword type="property" name="The “location” property" link="gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink--location"/>
-    <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsrc.html#id-1.2.57.6.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsrc.html#id-1.2.57.6.2.2"/>
-    <keyword type="struct" name="struct GstRTMPSrc" link="gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc"/>
+    <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsrc.html#id-1.2.57.8.2.1"/>
+    <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsrc.html#id-1.2.57.8.2.2"/>
+    <keyword type="struct" name="struct GstRTMPSrc" link="gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc-struct"/>
     <keyword type="property" name="The “location” property" link="gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc--location"/>
     <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsink.html#id-1.2.58.8.2.1"/>
     <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsink.html#id-1.2.58.8.2.2"/>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-compositor.html b/docs/plugins/html/gst-plugins-bad-plugins-compositor.html
index 46d76aa..59cae03 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-compositor.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-compositor.html
@@ -54,12 +54,12 @@
     <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
         <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
             <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-            <span class="lineart">│</span>   <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-GstAggregator.html#GstAggregator">GstAggregator</a>
-            <span class="lineart">│</span>       <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-GstVideoAggregator.html#GstVideoAggregator">GstVideoAggregator</a>
+            <span class="lineart">│</span>   <span class="lineart">╰──</span> GstAggregator
+            <span class="lineart">│</span>       <span class="lineart">╰──</span> GstVideoAggregator
             <span class="lineart">│</span>           <span class="lineart">╰──</span> GstCompositor
             <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html">GstPad</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-GstAggregatorPad.html#GstAggregatorPad">GstAggregatorPad</a>
-                    <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/gst-plugins-bad-libs-GstVideoAggregatorPad.html#GstVideoAggregatorPad">GstVideoAggregatorPad</a>
+                <span class="lineart">╰──</span> GstAggregatorPad
+                    <span class="lineart">╰──</span> GstVideoAggregatorPad
                         <span class="lineart">╰──</span> GstCompositorPad
 </pre>
 </div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faac.html b/docs/plugins/html/gst-plugins-bad-plugins-faac.html
index 7106a4c..4d0098e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faac.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faac.html
@@ -15,8 +15,7 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-faac.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-faac.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-faac.description" class="shortcut">Description</a></span><span id="nav_interfaces">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-faac.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-faac.properties" class="shortcut">Properties</a></span>
 </td>
@@ -86,7 +85,7 @@
 </tbody>
 </table></div>
 </div>
-<a name="GstFaac"></a><div class="refsect1">
+<div class="refsect1">
 <a name="gst-plugins-bad-plugins-faac.other"></a><h2>Types and Values</h2>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -95,21 +94,11 @@
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-faac.html#GstFaac-struct" title="struct GstFaac">GstFaac</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-faac.html#GstFaac" title="struct GstFaac">GstFaac</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
-<a name="gst-plugins-bad-plugins-faac.object-hierarchy"></a><h2>Object Hierarchy</h2>
-<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
-    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
-        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
-            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
-                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder">GstAudioEncoder</a>
-                    <span class="lineart">╰──</span> GstFaac
-</pre>
-</div>
-<div class="refsect1">
 <a name="gst-plugins-bad-plugins-faac.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GstFaac implements
@@ -120,7 +109,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.29.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.29.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -146,7 +135,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.29.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.29.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -210,8 +199,33 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-faac.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstFaac-struct"></a><h3>struct GstFaac</h3>
-<pre class="programlisting">struct GstFaac;</pre>
+<a name="GstFaac"></a><h3>struct GstFaac</h3>
+<pre class="programlisting">struct GstFaac {
+  GstAudioEncoder element;
+
+  /* input format */
+  gint format;
+  /* input frame size */
+  gint samples;
+  /* required output buffer size */
+  gint bytes;
+
+  /* negotiated */
+  gint mpegversion, outputformat;
+
+  /* properties */
+  gint bitrate,
+       profile,
+       quality,
+       brtype,
+       shortctl;
+  gboolean tns,
+           midside;
+
+  /* FAAC object */
+  faacEncHandle handle;
+};
+</pre>
 <p>
 </p>
 </div>
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 400f8f5..b8104a1 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.4.3</td>
+<td>1.4.4</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 f9c6ed5..b04ed1c 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.4.3</td>
+<td>1.4.4</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 9fdccd3..e5510f8 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.4.3</td>
+<td>1.4.4</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 590bcb3..64cc3f5 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.4.3</td>
+<td>1.4.4</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 95549d9..c03c708 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.4.3</td>
+<td>1.4.4</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 b12c68e..df09548 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.4.3</td>
+<td>1.4.4</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 e3e378f..d122ce9 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.4.3</td>
+<td>1.4.4</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 b7136e3..47deac1 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.4.3</td>
+<td>1.4.4</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 4e3e2af..fde4049 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.4.3</td>
+<td>1.4.4</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 ec722c7..f331d7c 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.4.3</td>
+<td>1.4.4</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 d8103eb..320b451 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.4.3</td>
+<td>1.4.4</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 d965e97..3e1efad 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.4.3</td>
+<td>1.4.4</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 1089385..ad75ea8 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.4.3</td>
+<td>1.4.4</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 98e43b1..b45f112 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.4.3</td>
+<td>1.4.4</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 79f7191..59a4ede 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.4.3</td>
+<td>1.4.4</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 3a8cd32..36f2ddd 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.4.3</td>
+<td>1.4.4</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 e782fb0..5cedd12 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.4.3</td>
+<td>1.4.4</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 4cbd345..addb246 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.4.3</td>
+<td>1.4.4</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 0995e5c..ea9c452 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.4.3</td>
+<td>1.4.4</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-liveadder.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html
index 943a4e7..8df95a3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.3</td>
+<td>1.4.4</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 c14aab8..42e2af5 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.4.3</td>
+<td>1.4.4</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 891bf64..fdd0829 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.4.3</td>
+<td>1.4.4</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 90dc2b8..d58b06c 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.4.3</td>
+<td>1.4.4</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 33cbaf5..5469d5c 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.4.3</td>
+<td>1.4.4</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 82cc540..0f1de15 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.4.3</td>
+<td>1.4.4</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 595c4ae..a58c1e7 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.4.3</td>
+<td>1.4.4</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 315a1a7..64e067b 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.4.3</td>
+<td>1.4.4</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 4f5419c..968f4a0 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.4.3</td>
+<td>1.4.4</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 7b6f14e..ac0bffd 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.4.3</td>
+<td>1.4.4</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 aa25338..5208f55 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.4.3</td>
+<td>1.4.4</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 ae99144..78b06b9 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.4.3</td>
+<td>1.4.4</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 bb1545b..c45802b 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.4.3</td>
+<td>1.4.4</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 75708dd..385894d 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.3.0.1</td>
+<td>1.4.4</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -50,7 +50,7 @@
 </tr>
 <tr>
 <td><p><span class="term">package</span></p></td>
-<td>GStreamer Bad Plug-ins git</td>
+<td>GStreamer Bad Plug-ins source release</td>
 </tr>
 <tr>
 <td><p><span class="term">origin</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 6989ecc..03d7bce 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.4.3</td>
+<td>1.4.4</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 60faa3e..f21d274 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.4.3</td>
+<td>1.4.4</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 fdcfb95..0edc409 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.4.3</td>
+<td>1.4.4</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 59dbe48..8066768 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.4.3</td>
+<td>1.4.4</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 38261a2..e479793 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.4.3</td>
+<td>1.4.4</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 e0cde11..dce5593 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.4.3</td>
+<td>1.4.4</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 c37f3a7..12ea014 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.3</td>
+<td>1.4.4</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
index 1b19795..664db8a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
@@ -15,7 +15,8 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-rtmpsink.description" class="shortcut">Description</a></span><span id="nav_interfaces">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-rtmpsink.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-rtmpsink.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-rtmpsink.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-rtmpsink.properties" class="shortcut">Properties</a></span>
 </td>
@@ -49,7 +50,7 @@
 </tr></tbody>
 </table></div>
 </div>
-<div class="refsect1">
+<a name="GstRTMPSink"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-rtmpsink.other"></a><h2>Types and Values</h2>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -58,11 +59,21 @@
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink" title="struct GstRTMPSink">GstRTMPSink</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink-struct" title="struct GstRTMPSink">GstRTMPSink</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
+<a name="gst-plugins-bad-plugins-rtmpsink.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSink.html">GstBaseSink</a>
+                    <span class="lineart">╰──</span> GstRTMPSink
+</pre>
+</div>
+<div class="refsect1">
 <a name="gst-plugins-bad-plugins-rtmpsink.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GstRTMPSink implements
@@ -73,7 +84,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.56.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.56.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -99,7 +110,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.56.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.56.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -135,11 +146,8 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-rtmpsink.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstRTMPSink"></a><h3>struct GstRTMPSink</h3>
-<pre class="programlisting">struct GstRTMPSink {
-  GstBaseSink parent;
-};
-</pre>
+<a name="GstRTMPSink-struct"></a><h3>struct GstRTMPSink</h3>
+<pre class="programlisting">struct GstRTMPSink;</pre>
 <p>
 </p>
 </div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
index 251433a..51a37a7 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
@@ -15,7 +15,8 @@
 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
 <td width="100%" align="left" class="shortcuts">
 <a href="#" class="shortcut">Top</a><span id="nav_description">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-bad-plugins-rtmpsrc.description" class="shortcut">Description</a></span><span id="nav_interfaces">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-rtmpsrc.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-bad-plugins-rtmpsrc.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-rtmpsrc.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties">  <span class="dim">|</span> 
                   <a href="#gst-plugins-bad-plugins-rtmpsrc.properties" class="shortcut">Properties</a></span>
 </td>
@@ -49,7 +50,7 @@
 </tr></tbody>
 </table></div>
 </div>
-<div class="refsect1">
+<a name="GstRTMPSrc"></a><div class="refsect1">
 <a name="gst-plugins-bad-plugins-rtmpsrc.other"></a><h2>Types and Values</h2>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -58,11 +59,22 @@
 </colgroup>
 <tbody><tr>
 <td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc" title="struct GstRTMPSrc">GstRTMPSrc</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc-struct" title="struct GstRTMPSrc">GstRTMPSrc</a></td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
+<a name="gst-plugins-bad-plugins-rtmpsrc.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen">    <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+    <span class="lineart">╰──</span> <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+        <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+            <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+                <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html">GstBaseSrc</a>
+                    <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                        <span class="lineart">╰──</span> GstRTMPSrc
+</pre>
+</div>
+<div class="refsect1">
 <a name="gst-plugins-bad-plugins-rtmpsrc.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GstRTMPSrc implements
@@ -73,7 +85,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.57.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.57.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -99,7 +111,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.57.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.57.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -135,11 +147,8 @@
 <div class="refsect1">
 <a name="gst-plugins-bad-plugins-rtmpsrc.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
-<a name="GstRTMPSrc"></a><h3>struct GstRTMPSrc</h3>
-<pre class="programlisting">struct GstRTMPSrc {
-  GstPushSrc parent;
-};
-</pre>
+<a name="GstRTMPSrc-struct"></a><h3>struct GstRTMPSrc</h3>
+<pre class="programlisting">struct GstRTMPSrc;</pre>
 <p>
 </p>
 </div>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 704b2d2..236f396 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.4.3)
+      for GStreamer Bad Plugins 1.0 (1.4.4)
       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/html/index.sgml b/docs/plugins/html/index.sgml
index b16f487..97c5d29 100644
--- a/docs/plugins/html/index.sgml
+++ b/docs/plugins/html/index.sgml
@@ -314,14 +314,12 @@
 <ANCHOR id="gst-plugins-bad-plugins-eglglessink.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html#gst-plugins-bad-plugins-eglglessink.other_details">
 <ANCHOR id="gst-plugins-bad-plugins-faac" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html">
 <ANCHOR id="gst-plugins-bad-plugins-faac.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#gst-plugins-bad-plugins-faac.properties">
-<ANCHOR id="GstFaac" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#GstFaac">
 <ANCHOR id="gst-plugins-bad-plugins-faac.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#gst-plugins-bad-plugins-faac.other">
-<ANCHOR id="gst-plugins-bad-plugins-faac.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#gst-plugins-bad-plugins-faac.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-faac.implemented-interfaces" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#gst-plugins-bad-plugins-faac.implemented-interfaces">
 <ANCHOR id="gst-plugins-bad-plugins-faac.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#gst-plugins-bad-plugins-faac.description">
 <ANCHOR id="gst-plugins-bad-plugins-faac.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#gst-plugins-bad-plugins-faac.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-faac.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#gst-plugins-bad-plugins-faac.other_details">
-<ANCHOR id="GstFaac-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#GstFaac-struct">
+<ANCHOR id="GstFaac" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#GstFaac">
 <ANCHOR id="gst-plugins-bad-plugins-faac.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#gst-plugins-bad-plugins-faac.property-details">
 <ANCHOR id="GstFaac--bitrate" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#GstFaac--bitrate">
 <ANCHOR id="GstFaac--midside" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#GstFaac--midside">
@@ -675,22 +673,26 @@
 <ANCHOR id="GstRfbSrc--view-only" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rfbsrc.html#GstRfbSrc--view-only">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsink" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsink.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#gst-plugins-bad-plugins-rtmpsink.properties">
+<ANCHOR id="GstRTMPSink" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsink.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#gst-plugins-bad-plugins-rtmpsink.other">
+<ANCHOR id="gst-plugins-bad-plugins-rtmpsink.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#gst-plugins-bad-plugins-rtmpsink.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsink.implemented-interfaces" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#gst-plugins-bad-plugins-rtmpsink.implemented-interfaces">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsink.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#gst-plugins-bad-plugins-rtmpsink.description">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsink.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#gst-plugins-bad-plugins-rtmpsink.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsink.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#gst-plugins-bad-plugins-rtmpsink.other_details">
-<ANCHOR id="GstRTMPSink" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink">
+<ANCHOR id="GstRTMPSink-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink-struct">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsink.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#gst-plugins-bad-plugins-rtmpsink.property-details">
 <ANCHOR id="GstRTMPSink--location" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink--location">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsrc.properties" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#gst-plugins-bad-plugins-rtmpsrc.properties">
+<ANCHOR id="GstRTMPSrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsrc.other" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#gst-plugins-bad-plugins-rtmpsrc.other">
+<ANCHOR id="gst-plugins-bad-plugins-rtmpsrc.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#gst-plugins-bad-plugins-rtmpsrc.object-hierarchy">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsrc.implemented-interfaces" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#gst-plugins-bad-plugins-rtmpsrc.implemented-interfaces">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsrc.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#gst-plugins-bad-plugins-rtmpsrc.description">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsrc.functions_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#gst-plugins-bad-plugins-rtmpsrc.functions_details">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsrc.other_details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#gst-plugins-bad-plugins-rtmpsrc.other_details">
-<ANCHOR id="GstRTMPSrc" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc">
+<ANCHOR id="GstRTMPSrc-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc-struct">
 <ANCHOR id="gst-plugins-bad-plugins-rtmpsrc.property-details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#gst-plugins-bad-plugins-rtmpsrc.property-details">
 <ANCHOR id="GstRTMPSrc--location" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc--location">
 <ANCHOR id="gst-plugins-bad-plugins-shmsink" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-shmsink.html">
diff --git a/docs/plugins/inspect/plugin-accurip.xml b/docs/plugins/inspect/plugin-accurip.xml
index 3e29c55..79edfbb 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.4.3</version>
+  <version>1.4.4</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 6a8b578..ae261b6 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.4.3</version>
+  <version>1.4.4</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 ea441de..bcb236f 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.4.3</version>
+  <version>1.4.4</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 3c9f035..671d8d2 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.4.3</version>
+  <version>1.4.4</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 004952f..382ed63 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.4.3</version>
+  <version>1.4.4</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 7e65bfe..c08edd7 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.4.3</version>
+  <version>1.4.4</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 784441d..08ef55c 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.4.3</version>
+  <version>1.4.4</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 76c4509..dff8800 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.4.3</version>
+  <version>1.4.4</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 715ed75..7cf47ef 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.4.3</version>
+  <version>1.4.4</version>
   <license>GPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-autoconvert.xml b/docs/plugins/inspect/plugin-autoconvert.xml
index 3ce0293..91a61a0 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.4.3</version>
+  <version>1.4.4</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 dae5d90..fb2539d 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.4.3</version>
+  <version>1.4.4</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 8208752..ed123fd 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.4.3</version>
+  <version>1.4.4</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 7aab0d8..86c1452 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.4.3</version>
+  <version>1.4.4</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 5f078c5..4dd2268 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.4.3</version>
+  <version>1.4.4</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 d43eb5a..6ca39af 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.4.3</version>
+  <version>1.4.4</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 0401f6f..88ceb68 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.4.3</version>
+  <version>1.4.4</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 673d61f..ca5bde4 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.4.3</version>
+  <version>1.4.4</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 c376d19..2958ba8 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.4.3</version>
+  <version>1.4.4</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 1577526..4087190 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.4.3</version>
+  <version>1.4.4</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 31d9a5d..ead33c2 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.4.3</version>
+  <version>1.4.4</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 b419d46..c09852e 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-dfbvideosink.xml b/docs/plugins/inspect/plugin-dfbvideosink.xml
index e3892ee..d19b743 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dtsdec.xml b/docs/plugins/inspect/plugin-dtsdec.xml
index 4279a0c..4896e05 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.4.3</version>
+  <version>1.4.4</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 43fd022..ce2433b 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.4.3</version>
+  <version>1.4.4</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 79d8faf..fb8c5dd 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.4.3</version>
+  <version>1.4.4</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 f5f04dc..e2a32de 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.4.3</version>
+  <version>1.4.4</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 8925ec0..5886ea4 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.4.3</version>
+  <version>1.4.4</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 ae2075e..cc7f383 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.4.3</version>
+  <version>1.4.4</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 c4082cc..511bec5 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.4.3</version>
+  <version>1.4.4</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 3b9b88a..5b3574c 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.4.3</version>
+  <version>1.4.4</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 6f16224..4acb079 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.4.3</version>
+  <version>1.4.4</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 0e674c1..567e630 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fragmented.xml b/docs/plugins/inspect/plugin-fragmented.xml
index 336c83b..a312ae1 100644
--- a/docs/plugins/inspect/plugin-fragmented.xml
+++ b/docs/plugins/inspect/plugin-fragmented.xml
@@ -3,7 +3,7 @@
   <description>Fragmented streaming plugins</description>
   <filename>../../ext/hls/.libs/libgstfragmented.so</filename>
   <basename>libgstfragmented.so</basename>
-  <version>1.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-freeverb.xml b/docs/plugins/inspect/plugin-freeverb.xml
index 6377b8f..97e820b 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.4.3</version>
+  <version>1.4.4</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 33b58b4..b512d90 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.4.3</version>
+  <version>1.4.4</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 5cb194b..f908189 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.4.3</version>
+  <version>1.4.4</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 40162fe..e044522 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.4.3</version>
+  <version>1.4.4</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 b174613..843c8f4 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.4.3</version>
+  <version>1.4.4</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 f235c6f..de69473 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.4.3</version>
+  <version>1.4.4</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 4e14f43..e84b041 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.4.3</version>
+  <version>1.4.4</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 c6026bd..46d3127 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-id3tag.xml b/docs/plugins/inspect/plugin-id3tag.xml
index bdc7284..58df0e7 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.4.3</version>
+  <version>1.4.4</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 34c2279..2ac96a6 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.4.3</version>
+  <version>1.4.4</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 4fd0c4e..215e559 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.4.3</version>
+  <version>1.4.4</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 3957353..3f35569 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.4.3</version>
+  <version>1.4.4</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 eaf514f..9dfc344 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.4.3</version>
+  <version>1.4.4</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 bf0b16a..b3fd766 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.4.3</version>
+  <version>1.4.4</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 a0d574a..5b61a47 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.4.3</version>
+  <version>1.4.4</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 16ecc3b..adf5659 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.4.3</version>
+  <version>1.4.4</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 f7e4fb5..2d923d9 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-liveadder.xml b/docs/plugins/inspect/plugin-liveadder.xml
index 1cd4924..64a5da9 100644
--- a/docs/plugins/inspect/plugin-liveadder.xml
+++ b/docs/plugins/inspect/plugin-liveadder.xml
@@ -3,7 +3,7 @@
   <description>Adds multiple live discontinuous streams</description>
   <filename>../../gst/liveadder/.libs/libgstliveadder.so</filename>
   <basename>libgstliveadder.so</basename>
-  <version>1.4.3</version>
+  <version>1.4.4</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 05ce93c..6b5123f 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.4.3</version>
+  <version>1.4.4</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 a07b40f..6cb03bb 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.4.3</version>
+  <version>1.4.4</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 7fb2445..dafdd10 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.4.3</version>
+  <version>1.4.4</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 2015c03..0b84bfa 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.4.3</version>
+  <version>1.4.4</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 edac8ce..51fd071 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.4.3</version>
+  <version>1.4.4</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 fca3243..e88c13a 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.4.3</version>
+  <version>1.4.4</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 c050c95..d28b270 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.4.3</version>
+  <version>1.4.4</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 0392520..82d3f89 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.4.3</version>
+  <version>1.4.4</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 e98c0d1..9904444 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpg123.xml b/docs/plugins/inspect/plugin-mpg123.xml
index 24b3b2d..04515ce 100644
--- a/docs/plugins/inspect/plugin-mpg123.xml
+++ b/docs/plugins/inspect/plugin-mpg123.xml
@@ -3,7 +3,7 @@
   <description>mp3 decoding based on the mpg123 library</description>
   <filename>../../ext/mpg123/.libs/libgstmpg123.so</filename>
   <basename>libgstmpg123.so</basename>
-  <version>1.4.3</version>
+  <version>1.4.4</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 733e810..9634309 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.4.3</version>
+  <version>1.4.4</version>
   <license>GPL</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 db07bbc..3c5790e 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.4.3</version>
+  <version>1.4.4</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 c47557f..ff985d6 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.4.3</version>
+  <version>1.4.4</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 e857596..233a22a 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.4.3</version>
+  <version>1.4.4</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 f0e7f86..927fe9a 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.4.3</version>
+  <version>1.4.4</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 bb8c4b4..4874992 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.4.3</version>
+  <version>1.4.4</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 c1bc8bb..08696cb 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-openjpeg.xml b/docs/plugins/inspect/plugin-openjpeg.xml
index c5eca6b..78ba51f 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-opus.xml b/docs/plugins/inspect/plugin-opus.xml
index 4abd8d9..3902399 100644
--- a/docs/plugins/inspect/plugin-opus.xml
+++ b/docs/plugins/inspect/plugin-opus.xml
@@ -3,7 +3,7 @@
   <description>OPUS plugin library</description>
   <filename>../../ext/opus/.libs/libgstopus.so</filename>
   <basename>libgstopus.so</basename>
-  <version>1.4.3</version>
+  <version>1.4.4</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 bf851aa..3dda8d0 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.4.3</version>
+  <version>1.4.4</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 fbe46d8..8205c01 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.4.3</version>
+  <version>1.4.4</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 3eb81b2..79a7d45 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.4.3</version>
+  <version>1.4.4</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 c507ede..6407308 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.4.3</version>
+  <version>1.4.4</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 f615998..1f5be42 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.4.3</version>
+  <version>1.4.4</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 e78c515..03df258 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.4.3</version>
+  <version>1.4.4</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 457a8ec..3d0c40e 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.4.3</version>
+  <version>1.4.4</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 092474f..e4b15b8 100644
--- a/docs/plugins/inspect/plugin-rtmp.xml
+++ b/docs/plugins/inspect/plugin-rtmp.xml
@@ -3,10 +3,10 @@
   <description>RTMP source and sink</description>
   <filename>../../ext/rtmp/.libs/libgstrtmp.so</filename>
   <basename>libgstrtmp.so</basename>
-  <version>1.3.0.1</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
-  <package>GStreamer Bad Plug-ins git</package>
+  <package>GStreamer Bad Plug-ins source release</package>
   <origin>Unknown package origin</origin>
   <elements>
     <element>
diff --git a/docs/plugins/inspect/plugin-sbc.xml b/docs/plugins/inspect/plugin-sbc.xml
index 5e76839..8430ad8 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.4.3</version>
+  <version>1.4.4</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 e58ed9c..090bc8d 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.4.3</version>
+  <version>1.4.4</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 038d730..93f0a46 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.4.3</version>
+  <version>1.4.4</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 df81603..122464c 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.4.3</version>
+  <version>1.4.4</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 5f49608..db4cd79 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.4.3</version>
+  <version>1.4.4</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 1c0b5d2..847ac2a 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.4.3</version>
+  <version>1.4.4</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 473009f..c00e1f1 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.4.3</version>
+  <version>1.4.4</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 f6c3961..7ec539b 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.4.3</version>
+  <version>1.4.4</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 aa8b169..65bff8d 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.4.3</version>
+  <version>1.4.4</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 e5cb0f2..adf1292 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.4.3</version>
+  <version>1.4.4</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 4a7af61..9e5a482 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.4.3</version>
+  <version>1.4.4</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 7a4a911..7676502 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.4.3</version>
+  <version>1.4.4</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 b563cae..804ea57 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.4.3</version>
+  <version>1.4.4</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 4a200fe..b2511bd 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.4.3</version>
+  <version>1.4.4</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 4f489db..7122033 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vdpau.xml b/docs/plugins/inspect/plugin-vdpau.xml
deleted file mode 100644
index cc2b450..0000000
--- a/docs/plugins/inspect/plugin-vdpau.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<plugin>
-  <name>vdpau</name>
-  <description>Various elements utilizing VDPAU</description>
-  <filename>../../sys/vdpau/.libs/libgstvdpau.so</filename>
-  <basename>libgstvdpau.so</basename>
-  <version>1.4.3</version>
-  <license>LGPL</license>
-  <source>gst-plugins-bad</source>
-  <package>GStreamer</package>
-  <origin>http://gstreamer.net/</origin>
-  <elements>
-    <element>
-      <name>vdpaumpegdec</name>
-      <longname>VDPAU Mpeg Decoder</longname>
-      <class>Decoder</class>
-      <description>Decode mpeg stream with vdpau</description>
-      <author>Carl-Anton Ingmarsson &lt;ca.ingmarsson@gmail.com&gt;</author>
-      <pads>
-        <caps>
-          <name>sink</name>
-          <direction>sink</direction>
-          <presence>always</presence>
-          <details>video/mpeg, mpegversion=(int)[ 1, 2 ], systemstream=(boolean)false</details>
-        </caps>
-        <caps>
-          <name>src</name>
-          <direction>source</direction>
-          <presence>always</presence>
-          <details>video/x-raw(memory:VdpVideoSurface), format=(string){ YV12 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ YV12 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
-        </caps>
-      </pads>
-    </element>
-  </elements>
-</plugin>
\ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-videofiltersbad.xml b/docs/plugins/inspect/plugin-videofiltersbad.xml
index b4cf697..f12cde2 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-videoparsersbad.xml b/docs/plugins/inspect/plugin-videoparsersbad.xml
index 10af021..4fa94d0 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.4.3</version>
+  <version>1.4.4</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 f83966b..7911025 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.4.3</version>
+  <version>1.4.4</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 e886adb..debed84 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.4.3</version>
+  <version>1.4.4</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 f946466..db0f33e 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.4.3</version>
+  <version>1.4.4</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 ab53de3..24953e3 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.4.3</version>
+  <version>1.4.4</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 13291ca..96ed4f7 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.4.3</version>
+  <version>1.4.4</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 c49490d..970ddda 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-wildmidi.xml b/docs/plugins/inspect/plugin-wildmidi.xml
index cde3a2f..c99a3da 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.4.3</version>
+  <version>1.4.4</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 d411e93..f5a9f0c 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.4.3</version>
+  <version>1.4.4</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 50437c6..b179b57 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.4.3</version>
+  <version>1.4.4</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 96e37fd..d376d7c 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.4.3</version>
+  <version>1.4.4</version>
   <license>LGPL</license>
   <source>gst-plugins-bad</source>
   <package>GStreamer Bad Plug-ins source release</package>
diff --git a/ext/curl/gstcurlsmtpsink.c b/ext/curl/gstcurlsmtpsink.c
index 4409ceb..c28213b 100644
--- a/ext/curl/gstcurlsmtpsink.c
+++ b/ext/curl/gstcurlsmtpsink.c
@@ -725,6 +725,13 @@
     return FALSE;
   }
 
+  res = curl_easy_setopt (bcsink->curl, CURLOPT_UPLOAD, 1L);
+  if (res != CURLE_OK) {
+    bcsink->error = g_strdup_printf ("failed to prepare for upload: %s",
+        curl_easy_strerror (res));
+    return FALSE;
+  }
+
   parent_class = GST_CURL_TLS_SINK_GET_CLASS (sink);
 
   if (sink->use_ssl) {
diff --git a/ext/dash/gstdashdemux.c b/ext/dash/gstdashdemux.c
index cb63c67..3f5c17c 100644
--- a/ext/dash/gstdashdemux.c
+++ b/ext/dash/gstdashdemux.c
@@ -605,6 +605,7 @@
             stream->last_ret = GST_FLOW_OK;
             stream->restart_download = TRUE;
             stream->need_header = TRUE;
+            stream->discont = TRUE;
             GST_DEBUG_OBJECT (stream->pad, "Restarting download loop");
             gst_task_start (stream->download_task);
           }
@@ -704,6 +705,7 @@
     stream = g_new0 (GstDashDemuxStream, 1);
     stream->demux = demux;
     stream->active_stream = active_stream;
+    stream->discont = FALSE;
     caps = gst_dash_demux_get_input_caps (demux, active_stream);
 
     g_rec_mutex_init (&stream->download_task_lock);
@@ -1942,6 +1944,11 @@
     GST_BUFFER_PTS (buffer) = GST_CLOCK_TIME_NONE;
   }
 
+  if (stream->discont) {
+    discont = TRUE;
+    stream->discont = FALSE;
+  }
+
   if (discont) {
     GST_DEBUG_OBJECT (stream->pad, "Marking fragment as discontinuous");
     GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
@@ -2184,9 +2191,10 @@
   GstMediaFragmentInfo *fragment = &stream->current_fragment;
 
   if (G_UNLIKELY (stream->restart_download)) {
+    GstSegment segment;
     GstClockTime cur, ts;
     gint64 pos;
-    GstEvent *gap;
+    GstEvent *seg_event;
 
     GST_DEBUG_OBJECT (stream->pad,
         "Reactivating stream after to reconfigure event");
@@ -2206,14 +2214,18 @@
     GST_DEBUG_OBJECT (stream->pad, "Restarting stream at "
         "position %" GST_TIME_FORMAT, GST_TIME_ARGS (ts));
 
+    gst_segment_copy_into (&demux->segment, &segment);
     if (GST_CLOCK_TIME_IS_VALID (ts)) {
       gst_mpd_client_stream_seek (demux->client, stream->active_stream, ts);
 
       if (cur < ts) {
-        gap = gst_event_new_gap (cur, ts - cur);
-        gst_pad_push_event (stream->pad, gap);
+        segment.position = ts;
       }
     }
+    seg_event = gst_event_new_segment (&segment);
+    GST_DEBUG_OBJECT (stream->pad, "Sending restart segment: %"
+        GST_PTR_FORMAT, seg_event);
+    gst_pad_push_event (stream->pad, seg_event);
 
     stream->restart_download = FALSE;
   }
diff --git a/ext/dash/gstdashdemux.h b/ext/dash/gstdashdemux.h
index 4e3a3ed..0c0f799 100644
--- a/ext/dash/gstdashdemux.h
+++ b/ext/dash/gstdashdemux.h
@@ -73,6 +73,7 @@
 
   gboolean stream_eos;
   gboolean need_header;
+  gboolean discont;
 
   /* Download task */
   GMutex download_mutex;
diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c
index e106da9..d9313d5 100644
--- a/ext/faad/gstfaad.c
+++ b/ext/faad/gstfaad.c
@@ -360,21 +360,18 @@
 wrong_length:
   {
     GST_DEBUG_OBJECT (faad, "codec_data less than 2 bytes long");
-    gst_object_unref (faad);
     gst_buffer_unmap (buf, &map);
     return FALSE;
   }
 open_failed:
   {
     GST_DEBUG_OBJECT (faad, "failed to create decoder");
-    gst_object_unref (faad);
     gst_buffer_unmap (buf, &map);
     return FALSE;
   }
 init_failed:
   {
     GST_DEBUG_OBJECT (faad, "faacDecInit2() failed");
-    gst_object_unref (faad);
     gst_buffer_unmap (buf, &map);
     return FALSE;
   }
diff --git a/ext/fluidsynth/gstfluiddec.c b/ext/fluidsynth/gstfluiddec.c
index 6b404af..124825b 100644
--- a/ext/fluidsynth/gstfluiddec.c
+++ b/ext/fluidsynth/gstfluiddec.c
@@ -322,6 +322,7 @@
 
       res = gst_pad_push_event (fluiddec->srcpad, gst_event_new_caps (caps));
       gst_caps_unref (caps);
+      gst_event_unref (event);
       break;
     }
     case GST_EVENT_SEGMENT:
@@ -396,6 +397,9 @@
 
   gst_buffer_map (buffer, &info, GST_MAP_READ);
 
+  if (info.size == 0)
+    goto done;
+
   event = info.data[0];
 
   switch (event & 0xf0) {
@@ -461,6 +465,9 @@
       break;
     }
   }
+
+done:
+
   gst_buffer_unmap (buffer, &info);
 }
 
@@ -557,10 +564,14 @@
           fluiddec->sf = fluid_synth_sfload (fluiddec->synth, filename, 1);
           if (fluiddec->sf != -1) {
             GST_DEBUG_OBJECT (fluiddec, "loaded soundfont file %s", filename);
+            g_free (filename);
+            g_dir_close (dir);
+            g_free (soundfont_path);
             goto done;
           }
           GST_DEBUG_OBJECT (fluiddec, "could not load soundfont file %s",
               filename);
+          g_free (filename);
         }
         g_dir_close (dir);
         g_free (soundfont_path);
diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c
index e79d3b6..c7e9a7b 100644
--- a/ext/gl/gstglimagesink.c
+++ b/ext/gl/gstglimagesink.c
@@ -358,6 +358,11 @@
 
   g_mutex_clear (&glimage_sink->drawing_lock);
 
+  if (glimage_sink->other_context) {
+    gst_object_unref (glimage_sink->other_context);
+    glimage_sink->other_context = NULL;
+  }
+
   g_free (glimage_sink->display_name);
 
   GST_DEBUG ("finalized");
@@ -729,6 +734,7 @@
   glimage_sink->upload = gst_gl_upload_new (glimage_sink->context);
 
   gst_gl_upload_set_format (glimage_sink->upload, &vinfo);
+  glimage_sink->caps_change = TRUE;
 
   return TRUE;
 }
@@ -1020,6 +1026,9 @@
   g_signal_emit (gl_sink, gst_glimage_sink_signals[CLIENT_RESHAPE_SIGNAL], 0,
       width, height, &do_reshape);
 
+  gl_sink->window_width = width;
+  gl_sink->window_height = height;
+
   /* default reshape */
   if (!do_reshape) {
     if (gl_sink->keep_aspect_ratio) {
@@ -1083,6 +1092,14 @@
   /* opengl scene */
   GST_TRACE ("redrawing texture:%u", gl_sink->redisplay_texture);
 
+  if (gl_sink->caps_change) {
+    GST_GLIMAGE_SINK_UNLOCK (gl_sink);
+    gst_glimage_sink_on_resize (gl_sink, gl_sink->window_width,
+        gl_sink->window_height);
+    GST_GLIMAGE_SINK_LOCK (gl_sink);
+    gl_sink->caps_change = FALSE;
+  }
+
   /* make sure that the environnement is clean */
   gst_gl_context_clear_shader (gl_sink->context);
 
diff --git a/ext/gl/gstglimagesink.h b/ext/gl/gstglimagesink.h
index efa557b..25e6a13 100644
--- a/ext/gl/gstglimagesink.h
+++ b/ext/gl/gstglimagesink.h
@@ -78,6 +78,10 @@
     GstBuffer *stored_buffer;
     GLuint redisplay_texture;
 
+    gboolean caps_change;
+    guint window_width;
+    guint window_height;
+
 #if GST_GL_HAVE_GLES2
   GstGLShader *redisplay_shader;
   GLint redisplay_attr_position_loc;
diff --git a/ext/gl/gstglmixer.c b/ext/gl/gstglmixer.c
index 5aa1bea..6a2d9a4 100644
--- a/ext/gl/gstglmixer.c
+++ b/ext/gl/gstglmixer.c
@@ -99,6 +99,8 @@
     gst_object_unref (pad->upload);
     pad->upload = NULL;
   }
+
+  G_OBJECT_CLASS (gst_gl_mixer_pad_parent_class)->finalize (object);
 }
 
 static void
@@ -131,6 +133,8 @@
 
   mix->priv->negotiated = ret;
 
+  gst_caps_replace (&mix->out_caps, caps);
+
   return ret;
 }
 
@@ -827,32 +831,37 @@
   gboolean res = TRUE;
   guint array_index = 0;
   GstVideoFrame out_frame;
-  gboolean out_gl_wrapped = FALSE;
   GstElement *element = GST_ELEMENT (mix);
   GstVideoAggregator *vagg = GST_VIDEO_AGGREGATOR (mix);
   GstGLMixerClass *mix_class = GST_GL_MIXER_GET_CLASS (mix);
   GstGLMixerPrivate *priv = mix->priv;
+  gboolean to_download =
+      gst_caps_features_is_equal (GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY,
+      gst_caps_get_features (mix->out_caps, 0));
+  GstMapFlags out_map_flags = GST_MAP_WRITE;
 
   GST_TRACE ("Processing buffers");
 
-  if (!gst_video_frame_map (&out_frame, &vagg->info, outbuf,
-          GST_MAP_WRITE | GST_MAP_GL)) {
+  to_download |= !gst_is_gl_memory (gst_buffer_peek_memory (outbuf, 0));
+
+  if (!to_download)
+    out_map_flags |= GST_MAP_GL;
+
+  if (!gst_video_frame_map (&out_frame, &vagg->info, outbuf, out_map_flags)) {
     return FALSE;
   }
 
-  if (gst_is_gl_memory (out_frame.map[0].memory)) {
+  if (!to_download) {
     out_tex = *(guint *) out_frame.data[0];
   } else {
     GST_INFO ("Output Buffer does not contain correct memory, "
         "attempting to wrap for download");
 
-    out_tex = mix->out_tex_id;;
-
     if (!mix->download)
       mix->download = gst_gl_download_new (mix->context);
 
     gst_gl_download_set_format (mix->download, &out_frame.info);
-    out_gl_wrapped = TRUE;
+    out_tex = mix->out_tex_id;
   }
 
   GST_OBJECT_LOCK (mix);
@@ -911,7 +920,7 @@
 
   g_mutex_unlock (&priv->gl_resource_lock);
 
-  if (out_gl_wrapped) {
+  if (to_download) {
     if (!gst_gl_download_perform_with_data (mix->download, out_tex,
             out_frame.data)) {
       GST_ELEMENT_ERROR (mix, RESOURCE, NOT_FOUND, ("%s",
diff --git a/ext/gl/gstglmixer.h b/ext/gl/gstglmixer.h
index a9e3a3c..d66ef30 100644
--- a/ext/gl/gstglmixer.h
+++ b/ext/gl/gstglmixer.h
@@ -69,6 +69,8 @@
   GstGLContext *context;
   GLuint fbo;
   GLuint depthbuffer;
+
+  GstCaps *out_caps;
 };
 
 struct _GstGLMixerClass
diff --git a/ext/gl/gstgltestsrc.c b/ext/gl/gstgltestsrc.c
index b64ebe1..e443df0 100644
--- a/ext/gl/gstgltestsrc.c
+++ b/ext/gl/gstgltestsrc.c
@@ -334,6 +334,8 @@
 
   gltestsrc->negotiated = TRUE;
 
+  gst_caps_replace (&gltestsrc->out_caps, caps);
+
   return TRUE;
 
 /* ERRORS */
@@ -449,14 +451,20 @@
 static GstFlowReturn
 gst_gl_test_src_fill (GstPushSrc * psrc, GstBuffer * buffer)
 {
-  GstGLTestSrc *src;
+  GstGLTestSrc *src = GST_GL_TEST_SRC (psrc);
   GstClockTime next_time;
   gint width, height;
   GstVideoFrame out_frame;
-  gboolean out_gl_wrapped = FALSE;
   guint out_tex;
+  gboolean to_download =
+      gst_caps_features_is_equal (GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY,
+      gst_caps_get_features (src->out_caps, 0));
+  GstMapFlags out_map_flags = GST_MAP_WRITE;
 
-  src = GST_GL_TEST_SRC (psrc);
+  to_download |= !gst_is_gl_memory (gst_buffer_peek_memory (buffer, 0));
+
+  if (!to_download)
+    out_map_flags |= GST_MAP_GL;
 
   if (G_UNLIKELY (!src->negotiated || !src->context))
     goto not_negotiated;
@@ -476,29 +484,27 @@
       src->make_image = gst_gl_test_src_black;
   }
 
-  if (!gst_video_frame_map (&out_frame, &src->out_info, buffer,
-          GST_MAP_WRITE | GST_MAP_GL)) {
+  if (!gst_video_frame_map (&out_frame, &src->out_info, buffer, out_map_flags)) {
     return GST_FLOW_NOT_NEGOTIATED;
   }
 
-  if (gst_is_gl_memory (out_frame.map[0].memory)) {
+  if (!to_download) {
     out_tex = *(guint *) out_frame.data[0];
   } else {
     GST_INFO ("Output Buffer does not contain correct meta, "
         "attempting to wrap for download");
 
+    if (!src->download)
+      src->download = gst_gl_download_new (src->context);
+
+    gst_gl_download_set_format (src->download, &out_frame.info);
+
     if (!src->out_tex_id) {
       gst_gl_context_gen_texture (src->context, &src->out_tex_id,
           GST_VIDEO_FORMAT_RGBA, GST_VIDEO_FRAME_WIDTH (&out_frame),
           GST_VIDEO_FRAME_HEIGHT (&out_frame));
     }
     out_tex = src->out_tex_id;
-
-    if (!src->download)
-      src->download = gst_gl_download_new (src->context);
-
-    gst_gl_download_set_format (src->download, &out_frame.info);
-    out_gl_wrapped = TRUE;
   }
 
   gst_buffer_replace (&src->buffer, buffer);
@@ -510,7 +516,7 @@
     goto not_negotiated;
   }
 
-  if (out_gl_wrapped) {
+  if (to_download) {
     if (!gst_gl_download_perform_with_data (src->download, out_tex,
             out_frame.data)) {
       GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, ("%s",
@@ -571,6 +577,8 @@
 {
   GstGLTestSrc *src = GST_GL_TEST_SRC (basesrc);
 
+  gst_caps_replace (&src->out_caps, NULL);
+
   if (src->context) {
     if (src->out_tex_id) {
       gst_gl_context_del_texture (src->context, &src->out_tex_id);
diff --git a/ext/gl/gstgltestsrc.h b/ext/gl/gstgltestsrc.h
index 48e4d86..73f9f34 100644
--- a/ext/gl/gstgltestsrc.h
+++ b/ext/gl/gstgltestsrc.h
@@ -112,6 +112,8 @@
     gboolean negotiated;
 
     void (*make_image) (GstGLTestSrc* v, GstBuffer* buffer, gint w, gint h);
+
+    GstCaps *out_caps;
 };
 
 struct _GstGLTestSrcClass {
diff --git a/ext/gl/gstgltransformation.c b/ext/gl/gstgltransformation.c
index 7d761fc..0da8860 100644
--- a/ext/gl/gstgltransformation.c
+++ b/ext/gl/gstgltransformation.c
@@ -253,8 +253,8 @@
 
   graphene_matrix_init_look_at (&view_matrix, &eye, &center, &up);
 
-  graphene_matrix_multiply (&projection_matrix, &view_matrix, &vp_matrix);
-  graphene_matrix_multiply (&vp_matrix, &model_matrix,
+  graphene_matrix_multiply (&view_matrix, &projection_matrix, &vp_matrix);
+  graphene_matrix_multiply (&model_matrix, &vp_matrix,
       &transformation->mvp_matrix);
 }
 
diff --git a/ext/gl/gstglvideomixer.c b/ext/gl/gstglvideomixer.c
index b9a1d68..22e9b7f 100644
--- a/ext/gl/gstglvideomixer.c
+++ b/ext/gl/gstglvideomixer.c
@@ -459,12 +459,14 @@
     in_width = GST_VIDEO_INFO_WIDTH (&GST_VIDEO_AGGREGATOR_PAD (pad)->info);
     in_height = GST_VIDEO_INFO_HEIGHT (&GST_VIDEO_AGGREGATOR_PAD (pad)->info);
 
-    if (!frame->texture || in_width <= 0 || in_height <= 0) {
-      GST_DEBUG ("skipping texture:%u frame:%p width:%u height %u",
-          frame->texture, frame, in_width, in_height);
+    if (!frame->texture || in_width <= 0 || in_height <= 0
+        || pad->alpha == 0.0f) {
+      GST_DEBUG ("skipping texture:%u frame:%p width:%u height:%u alpha:%f",
+          frame->texture, frame, in_width, in_height, pad->alpha);
       count++;
       continue;
     }
+
     in_tex = frame->texture;
     pad_width = pad->width <= 0 ? in_width : pad->width;
     pad_height = pad->height <= 0 ? in_height : pad->height;
@@ -495,9 +497,8 @@
     gl->EnableVertexAttribArray (attr_position_loc);
     gl->EnableVertexAttribArray (attr_texture_loc);
 
-    gl->BlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE,
-        GL_ZERO);
-    gl->BlendEquationSeparate (GL_FUNC_ADD, GL_FUNC_ADD);
+    gl->BlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+    gl->BlendEquation (GL_FUNC_ADD);
 
     gl->ActiveTexture (GL_TEXTURE0);
     gl->BindTexture (GL_TEXTURE_2D, in_tex);
diff --git a/ext/hls/gsthlsdemux.c b/ext/hls/gsthlsdemux.c
index e890b5f..b11d07e 100644
--- a/ext/hls/gsthlsdemux.c
+++ b/ext/hls/gsthlsdemux.c
@@ -486,6 +486,7 @@
         demux->discont = TRUE;
         demux->new_playlist = TRUE;
         demux->do_typefind = TRUE;
+        demux->end_of_playlist = FALSE;
 
         gst_hls_demux_change_playlist (demux,
             demux->current_download_rate * demux->bitrate_limit / ABS (rate));
@@ -513,6 +514,7 @@
         demux->discont = TRUE;
         demux->new_playlist = TRUE;
         demux->do_typefind = TRUE;
+        demux->end_of_playlist = FALSE;
 
         gst_hls_demux_change_playlist (demux,
             demux->current_download_rate * demux->bitrate_limit);
diff --git a/ext/rtmp/gstrtmpsink.c b/ext/rtmp/gstrtmpsink.c
index 58ee057..0e2e850 100644
--- a/ext/rtmp/gstrtmpsink.c
+++ b/ext/rtmp/gstrtmpsink.c
@@ -136,9 +136,12 @@
 static void
 gst_rtmp_sink_finalize (GObject * object)
 {
+  GstRTMPSink *sink = GST_RTMP_SINK (object);
+
 #ifdef G_OS_WIN32
   WSACleanup ();
 #endif
+  g_free (sink->uri);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
diff --git a/gst-libs/gst/base/gstaggregator.c b/gst-libs/gst/base/gstaggregator.c
index 9274600..e12ed93 100644
--- a/gst-libs/gst/base/gstaggregator.c
+++ b/gst-libs/gst/base/gstaggregator.c
@@ -706,6 +706,10 @@
   gst_aggregator_iterate_sinkpads (agg,
       (GstAggregatorPadForeachFunc) _flush_pad, NULL);
 
+  if (agg->priv->tags)
+    gst_tag_list_unref (agg->priv->tags);
+  agg->priv->tags = NULL;
+
   return TRUE;
 }
 
diff --git a/gst-libs/gst/codecparsers/gstvc1parser.h b/gst-libs/gst/codecparsers/gstvc1parser.h
index e2720d7..a73ff9d 100644
--- a/gst-libs/gst/codecparsers/gstvc1parser.h
+++ b/gst-libs/gst/codecparsers/gstvc1parser.h
@@ -84,8 +84,8 @@
 typedef enum
 {
     GST_VC1_LEVEL_LOW    = 0,    /* Simple/Main profile low level */
-    GST_VC1_LEVEL_MEDIUM = 1,    /* Simple/Main profile medium level */
-    GST_VC1_LEVEL_HIGH   = 2,   /* Main profile high level */
+    GST_VC1_LEVEL_MEDIUM = 2,    /* Simple/Main profile medium level */
+    GST_VC1_LEVEL_HIGH   = 4,   /* Main profile high level */
 
     GST_VC1_LEVEL_L0    = 0,    /* Advanced profile level 0 */
     GST_VC1_LEVEL_L1    = 1,    /* Advanced profile level 1 */
diff --git a/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h b/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h
index 4510cb2..fa7178b 100644
--- a/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h
+++ b/gst-libs/gst/gl/cocoa/gstgl_cocoa_private.h
@@ -30,48 +30,27 @@
 
 G_BEGIN_DECLS
 
-@interface AppThreadPerformer : NSObject {
-  GstGLWindowCocoa *m_cocoa;
-  GstGLWindowCB m_callback;
-  GstGLWindowResizeCB m_callback2;
-  gpointer m_data;
-  gint m_width;
-  gint m_height;
-}
-- (id) init: (GstGLWindowCocoa *)window;
-- (id) initWithCallback:(GstGLWindowCocoa *)window callback:(GstGLWindowCB)callback userData:(gpointer) data;
-- (id) initWithSize: (GstGLWindowCocoa *)window callback:(GstGLWindowResizeCB)callback userData:(gpointer)data toSize:(NSSize)size;
-- (id) initWithAll: (GstGLWindowCocoa *)window callback:(GstGLWindowCB)callback userData:(gpointer) data;
-- (void) updateWindow;
-- (void) sendToApp;
-- (void) setWindow;
-- (void) stopApp;
-- (void) closeWindow;
-@end
-
 struct _GstGLContextCocoaPrivate
 {
   NSOpenGLContext *gl_context;
   NSOpenGLContext *external_gl_context;
-  NSRect rect;
   gint source_id;
 };
 
 
 /* =============================================================*/
 /*                                                              */
-/*                  GstGLNSOpenGLView declaration               */
+/*                  GstGLNSView declaration               */
 /*                                                              */
 /* =============================================================*/
 
-@interface GstGLNSOpenGLView: NSOpenGLView {
-  GstGLWindowCocoa *m_cocoa;
+@interface GstGLNSView: NSView {
+  GstGLWindowCocoa *window_cocoa;
 }
-- (id) initWithFrame:(GstGLWindowCocoa *)window rect:(NSRect)contentRect
-    pixelFormat:(NSOpenGLPixelFormat *)fmt;
+- (id) initWithFrame:(GstGLWindowCocoa *)window rect:(NSRect)contentRect;
 @end
 
-gboolean gst_gl_window_cocoa_create_window (GstGLWindowCocoa *window_cocoa);
+gboolean gst_gl_window_cocoa_create_window (GstGLWindowCocoa *window_cocoa, NSRect rect);
 
 G_END_DECLS
 
diff --git a/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m b/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m
index cd45857..7a12650 100644
--- a/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m
+++ b/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m
@@ -85,7 +85,7 @@
   if ([NSThread isMainThread]) {
 
     while ((event = ([NSApp nextEventMatchingMask:NSAnyEventMask
-      untilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]
+      untilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]
       inMode:NSDefaultRunLoopMode dequeue:YES])) != nil) {
 
       [NSApp sendEvent:event];
@@ -135,7 +135,7 @@
 
   if ([NSThread isMainThread]) {
     /* In the main thread so just do the call now */
-    
+
     /* The sharedApplication class method initializes
      * the display environment and connects your program
      * to the window server and the display server
@@ -154,24 +154,40 @@
      * glib main loop running this is for debugging
      * purposes so that's ok to let us a chance
      */
+    GMainContext *context;
     gboolean is_loop_running = FALSE;
     gint64 end_time = 0;
 
-    g_mutex_init (&nsapp_lock);
-    g_cond_init (&nsapp_cond);
+    context = g_main_context_default ();
 
-    g_mutex_lock (&nsapp_lock);
-    g_idle_add_full (G_PRIORITY_HIGH, gst_gl_window_cocoa_init_nsapp, NULL, NULL);
-    end_time = g_get_monotonic_time () + 2 * 1000 * 1000;
-    is_loop_running = g_cond_wait_until (&nsapp_cond, &nsapp_lock, end_time);
-    g_mutex_unlock (&nsapp_lock);
+    if (g_main_context_is_owner (context)) {
+      /* At the thread running the default GLib main context but
+       * not the Cocoa main thread
+       * We can't do anything here
+       */
+    } else if (g_main_context_acquire (context)) {
+      /* No main loop running on the default main context,
+       * we can't do anything here */
+      g_main_context_release (context);
+    } else {
+      /* Main loop running on the default main context but it
+       * is not running in this thread */
+      g_mutex_init (&nsapp_lock);
+      g_cond_init (&nsapp_cond);
 
-    if (!is_loop_running) {
-      GST_WARNING ("no mainloop running");
+      g_mutex_lock (&nsapp_lock);
+      g_idle_add_full (G_PRIORITY_HIGH, gst_gl_window_cocoa_init_nsapp, NULL, NULL);
+      end_time = g_get_monotonic_time () + 500 * 1000;
+      is_loop_running = g_cond_wait_until (&nsapp_cond, &nsapp_lock, end_time);
+      g_mutex_unlock (&nsapp_lock);
+
+      if (!is_loop_running) {
+        GST_WARNING ("no mainloop running");
+      }
+
+      g_cond_clear (&nsapp_cond);
+      g_mutex_clear (&nsapp_lock);
     }
-
-    g_cond_clear (&nsapp_cond);
-    g_mutex_clear (&nsapp_lock);
   }
 
   [pool release];
@@ -201,17 +217,11 @@
   GstGLContextCocoaPrivate *priv = context_cocoa->priv;
   GstGLWindow *window = gst_gl_context_get_window (context);
   GstGLWindowCocoa *window_cocoa = GST_GL_WINDOW_COCOA (window);
-  GstGLNSOpenGLView *glView = nil;
-  NSWindow *window_handle;
-  NSRect rect;
-  NSAutoreleasePool *pool;
-  NSOpenGLPixelFormat *fmt = nil;
-  NSOpenGLContext *glContext = nil;
-  NSOpenGLPixelFormatAttribute attribs[] = {
-    NSOpenGLPFADoubleBuffer,
-    NSOpenGLPFAAccumSize, 32,
-    0
-  };
+  __block NSOpenGLContext *glContext = nil;
+
+#ifndef GNUSTEP
+  priv->source_id = g_timeout_add (200, gst_gl_window_cocoa_nsapp_iteration, NULL);
+#endif
 
   priv->gl_context = nil;
   if (other_context)
@@ -219,56 +229,64 @@
   else
     priv->external_gl_context = NULL;
 
-#ifdef GNUSTEP
-  GSRegisterCurrentThread();
-#endif
+  dispatch_sync (dispatch_get_main_queue (), ^{
+    NSAutoreleasePool *pool;
+    NSOpenGLPixelFormat *fmt = nil;
+    GstGLNSView *glView = nil;
+    NSOpenGLPixelFormatAttribute attribs[] = {
+      NSOpenGLPFADoubleBuffer,
+      NSOpenGLPFAAccumSize, 32,
+      0
+    };
+    NSRect rect;
+    NSWindow *window_handle;
 
-  pool = [[NSAutoreleasePool alloc] init];
+    pool = [[NSAutoreleasePool alloc] init];
 
 #ifdef GNUSTEP
-  [NSApplication sharedApplication];
+    [NSApplication sharedApplication];
 #endif
+    rect.origin.x = 0;
+    rect.origin.y = 0;
+    rect.size.width = 320;
+    rect.size.height = 240;
 
-  rect.origin.x = 0;
-  rect.origin.y = 0;
-  rect.size.width = 320;
-  rect.size.height = 240;
+    gst_gl_window_cocoa_create_window (window_cocoa, rect);
+    window_handle = (NSWindow *) gst_gl_window_get_window_handle (window);
 
-  priv->rect = rect;
+    fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs];
+    if (!fmt) {
+      gst_object_unref (window);
+      GST_WARNING ("cannot create NSOpenGLPixelFormat");
+      return;
+    }
 
-  gst_gl_window_cocoa_create_window (window_cocoa);
-  window_handle = (NSWindow *) gst_gl_window_get_window_handle (window);
+    glView = [[GstGLNSView alloc] initWithFrame:window_cocoa rect:rect];
 
-  glView = [GstGLNSOpenGLView alloc];
-
-  fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs];
-
-  if (!fmt) {
-    gst_object_unref (window);
-    GST_WARNING ("cannot create NSOpenGLPixelFormat");
-    return FALSE;
-  }
-
-  glView = [glView initWithFrame:window_cocoa rect:rect pixelFormat:fmt];
-
-  [window_handle setContentView:glView];
+    [window_handle setContentView:glView];
 
 #ifndef GNUSTEP
-  glContext = [[NSOpenGLContext alloc] initWithFormat:fmt 
-    shareContext:context_cocoa->priv->external_gl_context];
+    glContext = [[NSOpenGLContext alloc] initWithFormat:fmt
+      shareContext:context_cocoa->priv->external_gl_context];
 
-  GST_DEBUG ("NSOpenGL context created: %"G_GUINTPTR_FORMAT, (guintptr) glContext);
+    GST_DEBUG ("NSOpenGL context created: %"G_GUINTPTR_FORMAT, (guintptr) glContext);
 
-  context_cocoa->priv->gl_context = glContext;
+    context_cocoa->priv->gl_context = glContext;
 
-  [glContext setView:glView];
-
-  [glView setOpenGLContext:glContext];
+    [glContext setView:glView];
 
 #else
-  /* FIXME try to make context sharing work in GNUstep */
-  context_cocoa->priv->gl_context = [glView openGLContext];
+    /* FIXME try to make context sharing work in GNUstep */
+    context_cocoa->priv->gl_context = glContext;
 #endif
+    [pool release];
+  });
+
+  if (!glContext) {
+    g_source_remove (priv->source_id);
+    priv->source_id = 0;
+    return FALSE;
+  }
 
   /* OpenGL context is made current only one time threre.
    * Indeed, all OpenGL calls are made in only one thread,
@@ -287,21 +305,14 @@
 #else
       const GLint swapInterval = 1;
 #endif
-      [[glView openGLContext] setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
+      [glContext setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
     }
   } NS_HANDLER {
      GST_DEBUG ("your back-end does not implement NSOpenglContext::setValues\n");
   }
   NS_ENDHANDLER
 
-  GST_DEBUG ("opengl GstGLNSWindow initialized: %d x %d\n",
-    (gint) rect.size.width, (gint) rect.size.height);
-
-  [pool release];
-
-#ifndef GNUSTEP
-  priv->source_id = g_timeout_add_seconds (1, gst_gl_window_cocoa_nsapp_iteration, NULL);
-#endif
+  GST_DEBUG ("opengl GstGLNSWindow initialized");
 
   gst_object_unref (window);
 
@@ -311,6 +322,14 @@
 static void
 gst_gl_context_cocoa_destroy_context (GstGLContext *context)
 {
+  GstGLContextCocoa *context_cocoa = GST_GL_CONTEXT_COCOA (context);
+  GstGLContextCocoaPrivate *priv = context_cocoa->priv;
+
+  /* FIXME: Need to release context and other things? */
+  if (priv->source_id) {
+    g_source_remove (priv->source_id);
+    priv->source_id = 0;
+  }
 }
 
 static guintptr
@@ -328,11 +347,8 @@
 
   if (activate)
     [context_cocoa->priv->gl_context makeCurrentContext];
-#if 0
   else
-    /* FIXME */
-    [context_cocoa->priv->gl_context clearCurrentContext];
-#endif
+    [NSOpenGLContext clearCurrentContext];
   return TRUE;
 }
 
diff --git a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m
index 2de31d7..3f7cba7 100644
--- a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m
+++ b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m
@@ -1,6 +1,7 @@
 /*
  * GStreamer
  * Copyright (C) 2008 Julien Isorce <julien.isorce@gmail.com>
+ * Copyright (C) 2014 Sebastian Dröge <sebastian@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it un der the terms of the GNU Library General Public
@@ -34,7 +35,7 @@
 
 @interface GstGLNSWindow: NSWindow {
   BOOL m_isClosed;
-  GstGLWindowCocoa *m_cocoa;
+  GstGLWindowCocoa *window_cocoa;
 }
 - (id)initWithContentRect:(NSRect)contentRect
     styleMask: (unsigned int) styleMask
@@ -53,11 +54,6 @@
 /*                                                              */
 /* =============================================================*/
 
-#ifndef GNUSTEP
-static BOOL GSRegisterCurrentThread(void) { return TRUE; };
-static void GSUnregisterCurrentThread(void) {};
-#endif
-
 #define GST_GL_WINDOW_COCOA_GET_PRIVATE(o)  \
   (G_TYPE_INSTANCE_GET_PRIVATE((o), GST_GL_TYPE_WINDOW_COCOA, GstGLWindowCocoaPrivate))
 
@@ -69,6 +65,8 @@
 #define gst_gl_window_cocoa_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstGLWindowCocoa, gst_gl_window_cocoa, GST_GL_TYPE_WINDOW, DEBUG_INIT);
 
+static gboolean gst_gl_window_cocoa_open (GstGLWindow *window, GError **err);
+static void gst_gl_window_cocoa_close (GstGLWindow *window);
 static guintptr gst_gl_window_cocoa_get_window_handle (GstGLWindow * window);
 static void gst_gl_window_cocoa_set_window_handle (GstGLWindow * window,
     guintptr handle);
@@ -83,8 +81,10 @@
   GstGLNSWindow *internal_win_id;
   NSView *external_view;
   gboolean visible;
-  NSThread *thread;
-  gboolean running;
+  GMainContext *main_context;
+  GMainLoop *loop;
+
+  GLint viewport_dim[4];
 };
 
 static void
@@ -96,6 +96,8 @@
 
   g_type_class_add_private (klass, sizeof (GstGLWindowCocoaPrivate));
 
+  window_class->open = GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_open);
+  window_class->close = GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_close);
   window_class->get_window_handle =
       GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_get_window_handle);
   window_class->set_window_handle =
@@ -123,31 +125,52 @@
   return window;
 }
 
+/* Must be called from the main thread */
 gboolean
-gst_gl_window_cocoa_create_window (GstGLWindowCocoa *window_cocoa)
+gst_gl_window_cocoa_create_window (GstGLWindowCocoa *window_cocoa, NSRect rect)
 {
-  GstGLWindow *window = GST_GL_WINDOW (window_cocoa);
-  GstGLContext *context = gst_gl_window_get_context (window);
-  GstGLContextCocoa *context_cocoa = GST_GL_CONTEXT_COCOA (context);
   GstGLWindowCocoaPrivate *priv = window_cocoa->priv;
-  NSRect rect = context_cocoa->priv->rect;
 
-  priv->internal_win_id =[[GstGLNSWindow alloc] initWithContentRect:rect styleMask: 
-    (NSTitledWindowMask | NSClosableWindowMask |
-    NSResizableWindowMask | NSMiniaturizableWindowMask)
-    backing: NSBackingStoreBuffered defer: NO screen: nil gstWin: window_cocoa];
+  priv->internal_win_id = [[GstGLNSWindow alloc] initWithContentRect:rect styleMask: 
+      (NSTitledWindowMask | NSClosableWindowMask |
+      NSResizableWindowMask | NSMiniaturizableWindowMask)
+      backing: NSBackingStoreBuffered defer: NO screen: nil gstWin: window_cocoa];
 
-  GST_DEBUG ("NSWindow id: %"G_GUINTPTR_FORMAT, (guintptr) priv->internal_win_id);
+      GST_DEBUG ("NSWindow id: %"G_GUINTPTR_FORMAT, (guintptr) priv->internal_win_id);
 
-  priv->thread = [NSThread currentThread];
-
-  [NSApp setDelegate: priv->internal_win_id];
-
-  gst_object_unref (context);
+      [NSApp setDelegate: priv->internal_win_id];
 
   return TRUE;
 }
 
+static gboolean
+gst_gl_window_cocoa_open (GstGLWindow *window, GError **err)
+{
+  GstGLWindowCocoa *window_cocoa;
+
+  window_cocoa = GST_GL_WINDOW_COCOA (window);
+
+  window_cocoa->priv->main_context = g_main_context_new ();
+  window_cocoa->priv->loop =
+      g_main_loop_new (window_cocoa->priv->main_context, FALSE);
+
+  return TRUE;
+}
+
+static void
+gst_gl_window_cocoa_close (GstGLWindow *window)
+{
+  GstGLWindowCocoa *window_cocoa;
+
+  window_cocoa = GST_GL_WINDOW_COCOA (window);
+
+  g_main_loop_unref (window_cocoa->priv->loop);
+  g_main_context_unref (window_cocoa->priv->main_context);
+
+  [window_cocoa->priv->internal_win_id release];
+  window_cocoa->priv->internal_win_id = nil;
+}
+
 static guintptr
 gst_gl_window_cocoa_get_window_handle (GstGLWindow *window)
 {
@@ -162,22 +185,8 @@
 
   window_cocoa = GST_GL_WINDOW_COCOA (window);
   priv = window_cocoa->priv;
-  
+
   if (priv->internal_win_id) {
-    GstGLContextCocoa *context = (GstGLContextCocoa *) gst_gl_window_get_context (window);
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    AppThreadPerformer* app_thread_performer = [[AppThreadPerformer alloc] init:window_cocoa];
-
-    GSRegisterCurrentThread();
-
-    if (context) {
-      if (context->priv->source_id) {
-        g_source_remove (context->priv->source_id);
-        context->priv->source_id = 0;
-      }
-      gst_object_unref (context);
-    }
-
     if (handle) {
       priv->external_view = (NSView *) handle;
       priv->visible = TRUE;
@@ -186,109 +195,119 @@
       priv->external_view = 0;
       priv->visible = FALSE;
     }
-   
-    [app_thread_performer performSelectorOnMainThread:@selector(setWindow) 
-        withObject:0 waitUntilDone:YES];
 
-    [pool release];
+
+    dispatch_async (dispatch_get_main_queue (), ^{
+      NSView *view = [window_cocoa->priv->internal_win_id contentView];
+      [window_cocoa->priv->internal_win_id orderOut:window_cocoa->priv->internal_win_id];
+
+      [window_cocoa->priv->external_view addSubview: view];
+
+      [view setFrame: [window_cocoa->priv->external_view bounds]];
+      [view setAutoresizingMask: NSViewWidthSizable|NSViewHeightSizable];
+    });
   } else {
-    /* not internal window yet so delay it to the next drawing */
+    /* no internal window yet so delay it to the next drawing */
     priv->external_view = (NSView*) handle;
     priv->visible = FALSE;
   }
 }
 
 /* Thread safe */
-static void
-gst_gl_window_cocoa_draw (GstGLWindow * window, guint width, guint height)
+struct draw
 {
-  GstGLWindowCocoa *window_cocoa;
-  GstGLWindowCocoaPrivate *priv;
-  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-  AppThreadPerformer* app_thread_performer;
+  GstGLWindowCocoa *window;
+  guint width, height;
+};
 
-  window_cocoa = GST_GL_WINDOW_COCOA (window);
-  priv = window_cocoa->priv;
-
-  GSRegisterCurrentThread();
-
-  app_thread_performer = [[AppThreadPerformer alloc] init:window_cocoa];
+static void
+draw_cb (gpointer data)
+{
+  struct draw *draw_data = data;
+  GstGLWindowCocoa *window_cocoa = draw_data->window;
+  GstGLWindowCocoaPrivate *priv = window_cocoa->priv;
 
   /* useful when set_window_handle is called before
    * the internal NSWindow */
   if (priv->external_view && !priv->visible) {
-    gst_gl_window_cocoa_set_window_handle (window, (guintptr) priv->external_view);
+    gst_gl_window_cocoa_set_window_handle (GST_GL_WINDOW (window_cocoa), (guintptr) priv->external_view);
     priv->visible = TRUE;
   }
 
   if (!priv->external_view && !priv->visible) {
-    static gint x = 0;
-    static gint y = 0;
+    dispatch_sync (dispatch_get_main_queue (), ^{
+      NSRect mainRect = [[NSScreen mainScreen] visibleFrame];
+      NSRect windowRect = [priv->internal_win_id frame];
+      gint x = 0;
+      gint y = 0;
 
-    NSRect mainRect = [[NSScreen mainScreen] visibleFrame];
-    NSRect windowRect = [priv->internal_win_id frame];
+      GST_DEBUG ("main screen rect: %d %d %d %d\n", (int) mainRect.origin.x,
+          (int) mainRect.origin.y, (int) mainRect.size.width,
+          (int) mainRect.size.height);
 
-    GST_DEBUG ("main screen rect: %d %d %d %d\n", (int) mainRect.origin.x,
-        (int) mainRect.origin.y, (int) mainRect.size.width,
-        (int) mainRect.size.height);
+      windowRect.origin.x += x;
+      windowRect.origin.y += mainRect.size.height > y ? (mainRect.size.height - y) * 0.5 : y;
+      windowRect.size.width = draw_data->width;
+      windowRect.size.height = draw_data->height;
 
-    windowRect.origin.x += x;
-    windowRect.origin.y += mainRect.size.height > y ? (mainRect.size.height - y) * 0.5 : y;
-    windowRect.size.width = width;
-    windowRect.size.height = height;
+      GST_DEBUG ("window rect: %d %d %d %d\n", (int) windowRect.origin.x,
+          (int) windowRect.origin.y, (int) windowRect.size.width,
+          (int) windowRect.size.height);
 
-    GST_DEBUG ("window rect: %d %d %d %d\n", (int) windowRect.origin.x,
-        (int) windowRect.origin.y, (int) windowRect.size.width,
-        (int) windowRect.size.height);
-
-    x += 20;
-    y += 20;
+      x += 20;
+      y += 20;
 
 #ifndef GNUSTEP
-    [priv->internal_win_id setFrame:windowRect display:NO];
-    GST_DEBUG ("make the window available\n");
-    [priv->internal_win_id makeMainWindow];
+      [priv->internal_win_id setFrame:windowRect display:NO];
+      GST_DEBUG ("make the window available\n");
+      [priv->internal_win_id makeMainWindow];
 #endif
-    [app_thread_performer performSelector:@selector(orderFront)
-        onThread:priv->thread withObject:nil waitUntilDone:YES];
 
-    /*[priv->internal_win_id setViewsNeedDisplay:YES]; */
+      [priv->internal_win_id orderFrontRegardless];
+
+      [priv->internal_win_id setViewsNeedDisplay:YES];
+    });
     priv->visible = TRUE;
   }
 
-  [app_thread_performer performSelector:@selector(updateWindow)
-      onThread:priv->thread withObject:nil waitUntilDone:YES];
+  if (g_main_loop_is_running (priv->loop)) {
+    if (![priv->internal_win_id isClosed]) {
+      GstGLContext *context = gst_gl_window_get_context (GST_GL_WINDOW (window_cocoa));
+      NSOpenGLContext * glContext = (NSOpenGLContext *) gst_gl_context_get_gl_context (context);
 
-  [pool release];
+      /* draw opengl scene in the back buffer */
+      GST_GL_WINDOW (window_cocoa)->draw (GST_GL_WINDOW (window_cocoa)->draw_data);
+
+      /* Copy the back buffer to the front buffer */
+      [glContext flushBuffer];
+
+      gst_object_unref (context);
+    }
+  }
+}
+
+static void
+gst_gl_window_cocoa_draw (GstGLWindow * window, guint width, guint height)
+{
+  struct draw draw_data;
+
+  draw_data.window = GST_GL_WINDOW_COCOA (window);
+  draw_data.width = width;
+  draw_data.height = height;
+
+  gst_gl_window_send_message (window, (GstGLWindowCB) draw_cb, &draw_data);
 }
 
 static void
 gst_gl_window_cocoa_run (GstGLWindow * window)
 {
   GstGLWindowCocoa *window_cocoa;
-  GstGLWindowCocoaPrivate *priv;
-  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-  NSRunLoop *run_loop = [NSRunLoop currentRunLoop];
 
   window_cocoa = GST_GL_WINDOW_COCOA (window);
-  priv = window_cocoa->priv;
 
-  [run_loop addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
-
-  GST_DEBUG ("begin loop\n");
-
-  if (priv->internal_win_id != nil) {
-    priv->running = TRUE;
-    while (priv->running)
-      [run_loop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
-
-    [priv->internal_win_id release];
-    priv->internal_win_id = nil;
-  }
-
-  [pool release];
-
-  GST_DEBUG ("end loop\n");
+  GST_LOG ("starting main loop");
+  g_main_loop_run (window_cocoa->priv->loop);
+  GST_LOG ("exiting main loop");
 }
 
 /* Thread safe */
@@ -296,60 +315,50 @@
 gst_gl_window_cocoa_quit (GstGLWindow * window)
 {
   GstGLWindowCocoa *window_cocoa;
-  GstGLWindowCocoaPrivate *priv;
 
   window_cocoa = GST_GL_WINDOW_COCOA (window);
-  priv = window_cocoa->priv;
 
-  if (window) {
-    if (GSRegisterCurrentThread() || 1) {
-      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-      
-      AppThreadPerformer* app_thread_performer = [[AppThreadPerformer alloc]
-          initWithAll:window_cocoa callback:NULL userData:NULL];
-      [app_thread_performer performSelector:@selector(stopApp)
-          onThread:priv->thread withObject:nil waitUntilDone:YES];
-
-      [pool release];
-
-      GSUnregisterCurrentThread();
-    }
-    else
-      GST_DEBUG ("failed to register current thread, application thread is lost\n");
-  }
+  g_main_loop_quit (window_cocoa->priv->loop);
 }
 
 /* Thread safe */
+typedef struct _GstGLMessage
+{
+  GstGLWindowCB callback;
+  gpointer data;
+  GDestroyNotify destroy;
+} GstGLMessage;
+
+static gboolean
+_run_message (GstGLMessage * message)
+{
+  if (message->callback)
+    message->callback (message->data);
+
+  if (message->destroy)
+    message->destroy (message->data);
+
+  g_slice_free (GstGLMessage, message);
+
+  return FALSE;
+}
+
 static void
 gst_gl_window_cocoa_send_message_async (GstGLWindow * window,
     GstGLWindowCB callback, gpointer data, GDestroyNotify destroy)
 {
   GstGLWindowCocoa *window_cocoa;
-  GstGLWindowCocoaPrivate *priv;
+  GstGLMessage *message;
 
   window_cocoa = GST_GL_WINDOW_COCOA (window);
-  priv = window_cocoa->priv;
+  message = g_slice_new (GstGLMessage);
 
-  GSRegisterCurrentThread ();
+  message->callback = callback;
+  message->data = data;
+  message->destroy = destroy;
 
-  if (window) {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
-    /* performSelector is not re-entrant so do it manually */
-    if (G_UNLIKELY ([NSThread currentThread] == priv->thread)) {
-      if (callback)
-        callback (data);
-    } else {
-      AppThreadPerformer* app_thread_performer =
-          [[AppThreadPerformer alloc] initWithAll:window_cocoa
-              callback:callback userData:data];
-
-      [app_thread_performer performSelector:@selector(sendToApp)
-          onThread:priv->thread withObject:nil waitUntilDone:NO];
-      
-      [pool release];
-    }
-  }
+  g_main_context_invoke (window_cocoa->priv->main_context,
+      (GSourceFunc) _run_message, message);
 }
 
 /* =============================================================*/
@@ -358,6 +367,7 @@
 /*                                                              */
 /* =============================================================*/
 
+/* Must be called from the main thread */
 @implementation GstGLNSWindow
 
 - (id) initWithContentRect: (NSRect) contentRect
@@ -367,7 +377,7 @@
     gstWin: (GstGLWindowCocoa *) cocoa {
 
   m_isClosed = NO;
-  m_cocoa = cocoa;
+  window_cocoa = cocoa;
 
   self = [super initWithContentRect: contentRect
         styleMask: styleMask backing: bufferingType
@@ -381,14 +391,14 @@
 
   [self setBackgroundColor:[NSColor clearColor]];
 
-  [self orderOut:m_cocoa->priv->internal_win_id];
+  [self orderOut:window_cocoa->priv->internal_win_id];
 
-  if (m_cocoa->priv->external_view) {
+  if (window_cocoa->priv->external_view) {
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    NSView *view = [m_cocoa->priv->internal_win_id contentView];
+    NSView *view = [window_cocoa->priv->internal_win_id contentView];
 
-    [m_cocoa->priv->external_view addSubview: view];
-    [view setFrame: [m_cocoa->priv->external_view bounds]];
+    [window_cocoa->priv->external_view addSubview: view];
+    [view setFrame: [window_cocoa->priv->external_view bounds]];
     [view setAutoresizingMask: NSViewWidthSizable|NSViewHeightSizable];
 
     [pool release];
@@ -413,20 +423,25 @@
   return YES;
 }
 
+static void
+close_window_cb (gpointer data)
+{
+  GstGLWindowCocoa *window_cocoa = data;
+  GstGLWindow *window;
+
+  window = GST_GL_WINDOW (window_cocoa);
+
+  if (window->close) {
+    window->close (window->close_data);
+  }
+}
+
 /* Called in the main thread which is never the gl thread */
 - (BOOL) windowShouldClose:(id)sender {
-    
-  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-  AppThreadPerformer* app_thread_performer = [[AppThreadPerformer alloc] 
-    init:m_cocoa];
-    
+
   GST_DEBUG ("user clicked the close button\n");
-  
-  [app_thread_performer performSelector:@selector(closeWindow) onThread:m_cocoa->priv->thread
-    withObject:nil waitUntilDone:YES];
-  
-  [pool release];
-  
+  [window_cocoa->priv->internal_win_id setClosed];
+  gst_gl_window_send_message_async (GST_GL_WINDOW (window_cocoa), (GstGLWindowCB) close_window_cb, gst_object_ref (window_cocoa), (GDestroyNotify) gst_object_unref);
   return YES;
 }
 
@@ -460,175 +475,124 @@
 
 /* =============================================================*/
 /*                                                              */
-/*                GstGLNSOpenGLView implementation              */
+/*                GstGLNSView implementation              */
 /*                                                              */
 /* =============================================================*/
 
-@implementation GstGLNSOpenGLView
+@implementation GstGLNSView
 
-- (id)initWithFrame:(GstGLWindowCocoa *)window rect:(NSRect)contentRect pixelFormat:(NSOpenGLPixelFormat *)fmt {
+/* Must be called from the application main thread */
+- (id)initWithFrame:(GstGLWindowCocoa *)window rect:(NSRect)contentRect {
 
-  self = [super initWithFrame: contentRect pixelFormat: fmt];
+  self = [super initWithFrame: contentRect];
 
-  m_cocoa = window;
+  window_cocoa = window;
 
 #ifndef GNUSTEP
   [self setWantsLayer:NO];
 #endif
 
+  /* Get notified about changes */
+  [self setPostsFrameChangedNotifications:YES];
+  [[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(reshape:) name: NSViewFrameDidChangeNotification object: self];
+  [self setWantsBestResolutionOpenGLSurface:YES];
+
   return self;
 }
 
-- (void)reshape {
+- (void) dealloc {
+  [[NSNotificationCenter defaultCenter] removeObserver: self];
+  [super dealloc];
+}
+
+struct resize
+{
+  GstGLWindowCocoa * window;
+  NSRect bounds, visibleRect;
+};
+
+static void
+resize_cb (gpointer data)
+{
+  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+  struct resize *resize_data = data;
+  GstGLWindowCocoa *window_cocoa = resize_data->window;
+  GstGLWindow *window = GST_GL_WINDOW (window_cocoa);
+  GstGLContext *context = gst_gl_window_get_context (window);
+  NSOpenGLContext * glContext = (NSOpenGLContext *) gst_gl_context_get_gl_context (context);
+
+  if (g_main_loop_is_running (window_cocoa->priv->loop) && ![window_cocoa->priv->internal_win_id isClosed]) {
+    const GstGLFuncs *gl;
+
+    [glContext update];
+
+    gl = context->gl_vtable;
+
+    if (window->resize) {
+      window->resize (window->resize_data, resize_data->bounds.size.width, resize_data->bounds.size.height);
+      gl->GetIntegerv (GL_VIEWPORT, window_cocoa->priv->viewport_dim);
+    }
+
+    gl->Viewport (window_cocoa->priv->viewport_dim[0] - resize_data->visibleRect.origin.x,
+                  window_cocoa->priv->viewport_dim[1] - resize_data->visibleRect.origin.y,
+                  window_cocoa->priv->viewport_dim[2], window_cocoa->priv->viewport_dim[3]);
+
+    GST_GL_WINDOW (window_cocoa)->draw (GST_GL_WINDOW (window_cocoa)->draw_data);
+    [glContext flushBuffer];
+  }
+  gst_object_unref (context);
+  [pool release];
+}
+
+- (void)renewGState {
+  /* Don't update the screen until we redraw, this
+   * prevents flickering during scrolling, clipping,
+   * resizing, etc
+   */
+  [[self window] disableScreenUpdatesUntilFlush];
+
+  [super renewGState];
+}
+
+- (void)reshape: (NSNotification*)notification {
   GstGLWindow *window;
 
-  window = GST_GL_WINDOW (m_cocoa);
+  window = GST_GL_WINDOW (window_cocoa);
 
   if (window->resize) {
-
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     NSRect bounds = [self bounds];
-    AppThreadPerformer* app_thread_performer = [[AppThreadPerformer alloc]
-      initWithSize:m_cocoa callback:window->resize userData:window->resize_data
-      toSize:bounds.size];
+    NSRect visibleRect = [self visibleRect];
+    struct resize *resize_data = g_new (struct resize, 1);
 
-    [app_thread_performer performSelector:@selector(resizeWindow) onThread:m_cocoa->priv->thread
-      withObject:nil waitUntilDone:YES];
+    bounds = [self convertRectToBacking:bounds];
+    visibleRect = [self convertRectToBacking:visibleRect];
 
-    [pool release];
+    GST_DEBUG_OBJECT (window, "Window resized: bounds %lf %lf %lf %lf "
+                      "visibleRect %lf %lf %lf %lf",
+                      bounds.origin.x, bounds.origin.y,
+                      bounds.size.width, bounds.size.height,
+                      visibleRect.origin.x, visibleRect.origin.y,
+                      visibleRect.size.width, visibleRect.size.height);
+
+    resize_data->window = window_cocoa;
+    resize_data->bounds = bounds;
+    resize_data->visibleRect = visibleRect;
+
+    gst_gl_window_send_message_async (GST_GL_WINDOW (window_cocoa), (GstGLWindowCB) resize_cb, resize_data, (GDestroyNotify) g_free);
   }
 }
 
-- (void) update {
+- (void)drawRect: (NSRect)dirtyRect {
+  [self reshape:nil];
+}
+
+- (BOOL) isOpaque {
+    return YES;
+}
+
+- (BOOL) isFlipped {
+    return NO;
 }
 
 @end
 
-/* =============================================================*/
-/*                                                              */
-/*               AppThreadPerformer implementation              */
-/*                                                              */
-/* =============================================================*/
-
-@implementation AppThreadPerformer
-
-- (id) init: (GstGLWindowCocoa *) window {
-  m_cocoa = window;
-  m_callback = NULL;
-  m_callback2 = NULL;
-  m_data = NULL;
-  m_width = 0;
-  m_height = 0;
-  return self;
-}
-
-- (id) initWithCallback:(GstGLWindowCocoa *)window callback:(GstGLWindowCB)callback userData:(gpointer)data {
-  m_cocoa = window;
-  m_callback = callback;
-  m_callback2 = NULL;
-  m_data = data;
-  m_width = 0;
-  m_height = 0;
-  return self;
-}
-
-- (id) initWithSize: (GstGLWindowCocoa *) window
-    callback:(GstGLWindowResizeCB)callback userData:(gpointer)data
-  toSize:(NSSize)size {
-  m_cocoa = window;
-  m_callback = NULL;
-  m_callback2 = callback;
-  m_data = data;
-  m_width = size.width;
-  m_height = size.height;
-  return self;
-}
-
-- (id) initWithAll: (GstGLWindowCocoa *) window
-    callback:(GstGLWindowCB) callback userData: (gpointer) data {
-  m_cocoa = window;
-  m_callback = callback;
-  m_callback2 = NULL;
-  m_data = data;
-  m_width = 0;
-  m_height = 0;
-  return self;
-}
-
-- (void) updateWindow {
-  if (m_cocoa->priv->running) {
-
-    if (![m_cocoa->priv->internal_win_id isClosed]) {
-      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
-      /* draw opengl scene in the back buffer */
-      GST_GL_WINDOW (m_cocoa)->draw (GST_GL_WINDOW (m_cocoa)->draw_data);
-      /* Copy the back buffer to the front buffer */
-      [[[m_cocoa->priv->internal_win_id contentView] openGLContext] flushBuffer];
-
-      [pool release];
-    }
-  }
-}
-
-- (void) resizeWindow {
-  if (m_cocoa->priv->running && ![m_cocoa->priv->internal_win_id isClosed]) {
-    m_callback2 (m_data, m_width, m_height);
-    [[[m_cocoa->priv->internal_win_id contentView] openGLContext] update];
-      GST_GL_WINDOW (m_cocoa)->draw (GST_GL_WINDOW (m_cocoa)->draw_data);
-    [[[m_cocoa->priv->internal_win_id contentView] openGLContext] flushBuffer];
-  }
-}
-
-- (void) sendToApp {
-  if (m_callback)
-    m_callback (m_data);
-}
-
-- (void) setWindow {
-  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-  NSView *view = [m_cocoa->priv->internal_win_id contentView];
-
-  [m_cocoa->priv->internal_win_id orderOut:m_cocoa->priv->internal_win_id];
-
-  [m_cocoa->priv->external_view addSubview: view];
-
-  [view setFrame: [m_cocoa->priv->external_view bounds]];
-  [view setAutoresizingMask: NSViewWidthSizable|NSViewHeightSizable];
-
-  [pool release];
-}
-
-- (void) stopApp {
-#ifdef GNUSTEP
-  NSAutoreleasePool *pool = nil;
-#endif
-
-  m_cocoa->priv->running = FALSE;
-  if (m_callback)
-    m_callback (m_data);
-
-#ifdef GNUSTEP
-  pool = [[NSAutoreleasePool alloc] init];
-  if ([NSApp isRunning])
-    [NSApp stop:self];
-  [pool release];
-#endif
-}
-
-- (void) closeWindow {
-  GstGLWindow *window;
-
-  window = GST_GL_WINDOW (m_cocoa);
-
-  [m_cocoa->priv->internal_win_id setClosed];
-  if (window->close) {
-    window->close (window->close_data);
-  }
-}
-
-- (void) orderFront {
-  [m_cocoa->priv->internal_win_id orderFrontRegardless];
-}
-
-@end
diff --git a/gst-libs/gst/gl/gstglapi.h b/gst-libs/gst/gl/gstglapi.h
index b136662..798eeba 100644
--- a/gst-libs/gst/gl/gstglapi.h
+++ b/gst-libs/gst/gl/gstglapi.h
@@ -71,6 +71,10 @@
 # ifdef __APPLE__
 #  include <OpenGL/OpenGL.h>
 #  include <OpenGL/gl.h>
+#  if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
+#   define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
+#   include <OpenGL/gl3.h>
+#  endif
 #  include <OpenGL/glu.h>
 # else
 #  include <GL/gl.h>
diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c
index 87e04aa..2c76694 100644
--- a/gst-libs/gst/gl/gstglcolorconvert.c
+++ b/gst-libs/gst/gl/gstglcolorconvert.c
@@ -237,15 +237,39 @@
     "#endif\n"
     "varying vec2 v_texcoord;\n"
     "uniform sampler2D tex;\n"
-    "uniform float w, h;\n"
+    "uniform float width;\n"
+    "uniform float height;\n"
+    "uniform vec2 chroma_sampling;\n"
     RGB_TO_YUV_COEFFICIENTS
     "void main(void) {\n"
     "  float y, u, v;\n"
+    "  vec4 uv_texel;\n"
     "  vec4 texel = texture2D(tex, v_texcoord).%c%c%c%c;\n"
-    "  vec4 texel2 = texture2D(tex, v_texcoord * 2.0).%c%c%c%c;\n"
+    /* One u and v sample can be generated by a nxm sized block given by
+     * @chroma_sampling.  The result is the average of all the values in the
+     * block computed with a rolling average.
+     */
+    "  vec2 size = vec2(width, height);\n"
+    "  vec2 pos = v_texcoord * size;\n"
+       /* scale for chroma size */
+    "  vec2 chroma_pos = v_texcoord * chroma_sampling * size;\n"
+       /* offset chroma to the center of the first texel in the block */
+    "  chroma_pos -= clamp(chroma_sampling * 0.5 - 0.5, vec2(0.0), chroma_sampling);\n"
+    "  if (chroma_pos.x < width && chroma_pos.y < height) {\n"
+    "    for (int i = 0; i < int(chroma_sampling.x); i++) {\n"
+    "      vec2 delta = vec2 (float(i), 0.0);\n"
+    "      for (int j = 0; j < int(chroma_sampling.y); j++) {\n"
+    "        int n = (i+1)*(j+1);\n"
+    "        delta.y = float(j);\n"
+    "        vec4 sample = texture2D(tex, (chroma_pos + delta) / size).%c%c%c%c;\n"
+             /* rolling average */
+    "        uv_texel = (float(n-1) * uv_texel + sample) / float(n);\n"
+    "      }\n"
+    "    }\n"
+    "  }\n"
     "  y = dot(texel.rgb, coeff1);\n"
-    "  u = dot(texel2.rgb, coeff2);\n"
-    "  v = dot(texel2.rgb, coeff3);\n"
+    "  u = dot(uv_texel.rgb, coeff2);\n"
+    "  v = dot(uv_texel.rgb, coeff3);\n"
     "  y += offset.x;\n"
     "  u += offset.y;\n"
     "  v += offset.z;\n"
@@ -326,25 +350,33 @@
     "void main(void) {\n"
     "  vec4 texel1, texel2;\n"
     "  vec2 texel3;\n"
-    "  float fx, fy, y1, y2, u, v;\n"
-    "  fx = v_texcoord.x;\n"
-    "  fy = v_texcoord.y;\n"
+    "  float fx, dx, fy, y, u, u1, u2, v, v1, v2;\n"
     "  float inorder = mod (v_texcoord.x * width, 2.0);\n"
-    "  texel1 = texture2D(tex, vec2(fx,     fy)).%c%c%c%c;\n"
-    "  texel2 = texture2D(tex, vec2(fx+1.0 / width, fy)).%c%c%c%c;\n"
-    "  y1 = dot(texel1.rgb, coeff1);\n"
-    "  y2 = dot(texel2.rgb, coeff1);\n"
-    "  u = dot(texel1.rgb, coeff2);\n"
-    "  v = dot(texel1.rgb, coeff3);\n"
-    "  y1 += offset.x;\n"
-    "  y2 += offset.x;\n"
-    "  u += offset.y;\n"
-    "  v += offset.z;\n"
+    "  fx = v_texcoord.x;\n"
+    "  dx = 1.0 / width;\n"
+    "  if (v_texcoord.x >= (1.0 - 0.5 * dx) || (v_texcoord.x > 0.5 * dx && inorder < 1.0)) {\n"
+    "    dx = -dx;\n"
+    "  }\n"
+    "  fy = v_texcoord.y;\n"
+    "  texel1 = texture2D(tex, vec2(fx, fy)).%c%c%c%c;\n"
+    "  texel2 = texture2D(tex, vec2(fx + dx, fy)).%c%c%c%c;\n"
+    "  y = dot(texel1.rgb, coeff1);\n"
+    "  u1 = dot(texel1.rgb, coeff2);\n"
+    "  u2 = dot(texel2.rgb, coeff2);\n"
+    "  v1 = dot(texel1.rgb, coeff3);\n"
+    "  v2 = dot(texel2.rgb, coeff3);\n"
+    "  y += offset.x;\n"
+    "  u1 += offset.y;\n"
+    "  u2 += offset.y;\n"
+    "  v1 += offset.z;\n"
+    "  v2 += offset.z;\n"
+    "  u = (u1 + u2) / 2.0;\n"
+    "  v = (v1 + v2) / 2.0;\n"
     "  if (inorder < 1.0) {\n"
-    "    texel3.r = %s;\n"
+    "    texel3.r =%s;\n"
     "    texel3.g = %s;\n"
     "  } else {\n"
-    "    texel3.r = %s;\n"
+    "    texel3.r =%s;\n"
     "    texel3.g = %s;\n"
     "  }\n"
     "  gl_FragColor = vec4(texel3.r, texel3.g, 0.0, 0.0);\n"
@@ -372,6 +404,7 @@
   gfloat *cms_coeff1;           /* r,y */
   gfloat *cms_coeff2;           /* g,u */
   gfloat *cms_coeff3;           /* b,v */
+  gfloat chroma_sampling[2];
 };
 
 struct _GstGLColorConvertPrivate
@@ -410,6 +443,8 @@
 gst_gl_color_convert_init (GstGLColorConvert * convert)
 {
   convert->priv = GST_GL_COLOR_CONVERT_GET_PRIVATE (convert);
+
+  gst_gl_color_convert_reset (convert);
 }
 
 /**
@@ -469,6 +504,9 @@
     convert->priv->out_tex[i] = NULL;
   }
 
+  convert->priv->convert_info.chroma_sampling[0] = 1.0f;
+  convert->priv->convert_info.chroma_sampling[1] = 1.0f;
+
   if (convert->shader) {
     gst_object_unref (convert->shader);
     convert->shader = NULL;
@@ -673,8 +711,17 @@
 
   info->in_n_textures = 1;
   info->out_n_textures = 1;
-  if (_is_RGBx (in_format))
-    alpha = g_strdup_printf ("t.%c = 1.0;", pixel_order[3]);
+  if (_is_RGBx (in_format)) {
+    int i;
+    char input_alpha_channel = 'a';
+    for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
+      if (in_format_str[i] == 'X' || in_format_str[i] == 'x') {
+        input_alpha_channel = _index_to_shader_swizzle (i);
+        break;
+      }
+    }
+    alpha = g_strdup_printf ("t.%c = 1.0;", input_alpha_channel);
+  }
   info->frag_prog = g_strdup_printf (frag_REORDER, alpha ? alpha : "",
       pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
   info->shader_tex_names[0] = "tex";
@@ -793,6 +840,7 @@
   struct ConvertInfo *info = &convert->priv->convert_info;
   GstVideoFormat in_format = GST_VIDEO_INFO_FORMAT (&convert->in_info);
   const gchar *in_format_str = gst_video_format_to_string (in_format);
+  GstVideoFormat out_format = GST_VIDEO_INFO_FORMAT (&convert->out_info);
   gchar *pixel_order = _RGB_pixel_order (in_format_str, "rgba");
   const gchar *alpha;
 
@@ -801,7 +849,7 @@
 
   info->shader_tex_names[0] = "tex";
 
-  switch (GST_VIDEO_INFO_FORMAT (&convert->out_info)) {
+  switch (out_format) {
     case GST_VIDEO_FORMAT_AYUV:
       alpha = _is_RGBx (in_format) ? "1.0" : "texel.a";
       info->frag_prog = g_strdup_printf (frag_RGB_to_AYUV, pixel_order[0],
@@ -817,19 +865,30 @@
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
       info->out_n_textures = 3;
+      if (out_format == GST_VIDEO_FORMAT_Y444) {
+        info->chroma_sampling[0] = info->chroma_sampling[1] = 1.0f;
+      } else if (out_format == GST_VIDEO_FORMAT_Y42B) {
+        info->chroma_sampling[0] = 2.0f;
+        info->chroma_sampling[1] = 1.0f;
+      } else if (out_format == GST_VIDEO_FORMAT_Y41B) {
+        info->chroma_sampling[0] = 4.0f;
+        info->chroma_sampling[1] = 1.0f;
+      } else {
+        info->chroma_sampling[0] = info->chroma_sampling[1] = 2.0f;
+      }
       break;
     case GST_VIDEO_FORMAT_YUY2:
       info->frag_prog = g_strdup_printf (frag_RGB_to_YUY2_UYVY,
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
-          "y1", "u", "y2", "v");
+          "y", "u", "y", "v");
       info->out_n_textures = 1;
       break;
     case GST_VIDEO_FORMAT_UYVY:
       info->frag_prog = g_strdup_printf (frag_RGB_to_YUY2_UYVY,
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
           pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3],
-          "u", "y1", "v", "y2");
+          "u", "y", "v", "y");
       info->out_n_textures = 1;
       break;
     default:
@@ -1036,6 +1095,13 @@
 
   gst_gl_shader_set_uniform_1f (convert->shader, "width",
       GST_VIDEO_INFO_WIDTH (&convert->in_info));
+  gst_gl_shader_set_uniform_1f (convert->shader, "height",
+      GST_VIDEO_INFO_HEIGHT (&convert->in_info));
+
+  if (info->chroma_sampling[0] > 0.0f && info->chroma_sampling[1] > 0.0f) {
+    gst_gl_shader_set_uniform_2fv (convert->shader, "chroma_sampling", 1,
+        info->chroma_sampling);
+  }
 
   gst_gl_context_clear_shader (convert->context);
 
@@ -1191,11 +1257,14 @@
     convert->priv->in_tex[i] =
         (GstGLMemory *) gst_buffer_peek_memory (convert->inbuf, i);
     if (!gst_is_gl_memory ((GstMemory *) convert->priv->in_tex[i])) {
+      GST_ERROR_OBJECT (convert, "input must be GstGLMemory");
       res = FALSE;
       goto out;
     }
     if (!gst_memory_map ((GstMemory *) convert->priv->in_tex[i], &in_info[i],
             GST_MAP_READ | GST_MAP_GL)) {
+      GST_ERROR_OBJECT (convert, "failed to map input memory %p",
+          convert->priv->in_tex[i]);
       res = FALSE;
       goto out;
     }
@@ -1205,6 +1274,7 @@
     GstGLMemory *out_tex =
         (GstGLMemory *) gst_buffer_peek_memory (convert->outbuf, j);
     if (!gst_is_gl_memory ((GstMemory *) out_tex)) {
+      GST_ERROR_OBJECT (convert, "output must be GstGLMemory");
       res = FALSE;
       goto out;
     }
@@ -1225,6 +1295,8 @@
 
     if (!gst_memory_map ((GstMemory *) convert->priv->out_tex[j], &out_info[j],
             GST_MAP_WRITE | GST_MAP_GL)) {
+      GST_ERROR_OBJECT (convert, "failed to map output memory %p",
+          convert->priv->out_tex[i]);
       res = FALSE;
       goto out;
     }
diff --git a/gst-libs/gst/gl/gstglcontext.c b/gst-libs/gst/gl/gstglcontext.c
index 82d468b..a197bf1 100644
--- a/gst-libs/gst/gl/gstglcontext.c
+++ b/gst-libs/gst/gl/gstglcontext.c
@@ -138,6 +138,7 @@
   GstGLDisplay *display;
 
   GThread *gl_thread;
+  GThread *active_thread;
 
   /* conditions */
   GMutex render_lock;
@@ -147,7 +148,7 @@
   gboolean created;
   gboolean alive;
 
-  GstGLContext *other_context;
+  GWeakRef other_context_ref;
   GError **error;
 
   gint gl_major;
@@ -215,6 +216,8 @@
   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);
 }
 
 static void
@@ -249,6 +252,8 @@
  * Create a new #GstGLContext with the specified @display
  *
  * Returns: a new #GstGLContext
+ *
+ * Since: 1.4
  */
 GstGLContext *
 gst_gl_context_new (GstGLDisplay * display)
@@ -305,6 +310,8 @@
  * Wraps an existing OpenGL context into a #GstGLContext.  
  *
  * Returns: a #GstGLContext wrapping @handle
+ *
+ * Since: 1.4
  */
 GstGLContext *
 gst_gl_context_new_wrapped (GstGLDisplay * display, guintptr handle,
@@ -379,6 +386,7 @@
   g_cond_clear (&context->priv->create_cond);
 
   g_free (context->priv->gl_exts);
+  g_weak_ref_clear (&context->priv->other_context_ref);
 
   G_OBJECT_CLASS (gst_gl_context_parent_class)->finalize (object);
 }
@@ -394,6 +402,8 @@
  * currently set window.  See gst_gl_context_set_window() for details.
  *
  * Returns: Whether the activation succeeded
+ *
+ * Since: 1.4
  */
 gboolean
 gst_gl_context_activate (GstGLContext * context, gboolean activate)
@@ -405,12 +415,39 @@
   context_class = GST_GL_CONTEXT_GET_CLASS (context);
   g_return_val_if_fail (context_class->activate != NULL, FALSE);
 
+  GST_OBJECT_LOCK (context);
   result = context_class->activate (context, activate);
 
+  context->priv->active_thread = result
+      && activate ? context->priv->gl_thread : NULL;
+  GST_OBJECT_UNLOCK (context);
+
   return result;
 }
 
 /**
+ * gst_gl_context_get_thread:
+ * @context: a #GstGLContext
+ *
+ * Returns: (transfer full): The #GThread, @context is current in or NULL
+ *
+ * Since: 1.4.5
+ */
+GThread *
+gst_gl_context_get_thread (GstGLContext * context)
+{
+  GThread *ret;
+
+  GST_OBJECT_LOCK (context);
+  ret = context->priv->active_thread;
+  if (ret)
+    g_thread_ref (ret);
+  GST_OBJECT_UNLOCK (context);
+
+  return ret;
+}
+
+/**
  * gst_gl_context_get_gl_api:
  * @context: a #GstGLContext
  *
@@ -419,7 +456,9 @@
  * The currently available API may be limited by the #GstGLDisplay in use and/or
  * the #GstGLWindow chosen.
  *
- * Returns: the currently available OpenGL api
+ * Returns: the available OpenGL api
+ *
+ * Since: 1.4
  */
 GstGLAPI
 gst_gl_context_get_gl_api (GstGLContext * context)
@@ -445,6 +484,8 @@
  * be retreived using this method.
  *
  * Returns: a function pointer or NULL
+ *
+ * Since: 1.4
  */
 gpointer
 gst_gl_context_get_proc_address (GstGLContext * context, const gchar * name)
@@ -503,6 +544,8 @@
  * already running.
  *
  * Returns: Whether the window was successfully updated
+ *
+ * Since: 1.4
  */
 gboolean
 gst_gl_context_set_window (GstGLContext * context, GstGLWindow * window)
@@ -533,6 +576,8 @@
  * @context: a #GstGLContext
  *
  * Returns: the currently set window
+ *
+ * Since: 1.4
  */
 GstGLWindow *
 gst_gl_context_get_window (GstGLContext * context)
@@ -547,6 +592,73 @@
   return gst_object_ref (context->window);
 }
 
+static gboolean
+_share_group_descendant (GstGLContext * context, GstGLContext * other_context,
+    GstGLContext ** root)
+{
+  GstGLContext *next = gst_object_ref (context);
+  GstGLContext *prev = NULL;
+
+  /* given a context tree where --> means "has other gl context":
+   *
+   * a-->b-->c-->d
+   *    /   /
+   *   e   /
+   *      /
+   * f-->g
+   *
+   * return TRUE if @other_context is a descendant of @context
+   *
+   * e.g. [a, b], [f, d], [e, c] are all descendants
+   * but [b, a], [d, f], [e, f] are not descendants.  Provide the root node (d)
+   * so that we can check if two chains end up at the end with the same
+   * GstGLContext
+   */
+
+  while (next != NULL) {
+    if (next == other_context) {
+      gst_object_unref (next);
+      if (root)
+        *root = NULL;
+      return TRUE;
+    }
+
+    prev = next;
+    next = g_weak_ref_get (&next->priv->other_context_ref);
+    gst_object_unref (prev);
+  }
+
+  if (root != NULL)
+    *root = prev;
+
+  return FALSE;
+}
+
+/**
+ * gst_gl_context_can_share:
+ * @context: a #GstGLContext
+ * @other_context: another #GstGLContext
+ *
+ * Returns: whether @context and @other_context are able to share OpenGL
+ *      resources.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_gl_context_can_share (GstGLContext * context, GstGLContext * other_context)
+{
+  GstGLContext *root1, *root2;
+
+  g_return_val_if_fail (GST_GL_IS_CONTEXT (context), FALSE);
+  g_return_val_if_fail (GST_GL_IS_CONTEXT (other_context), FALSE);
+
+  /* check if the contexts are descendants or the root nodes are the same */
+  return context == other_context
+      || _share_group_descendant (context, other_context, &root1)
+      || _share_group_descendant (other_context, context, &root2)
+      || ((root1 != NULL || root2 != NULL) && root1 == root2);
+}
+
 /**
  * gst_gl_context_create:
  * @context: a #GstGLContext:
@@ -563,6 +675,8 @@
  * Should only be called once.
  *
  * Returns: whether the context could successfully be created
+ *
+ * Since: 1.4
  */
 gboolean
 gst_gl_context_create (GstGLContext * context,
@@ -577,7 +691,7 @@
   g_mutex_lock (&context->priv->render_lock);
 
   if (!context->priv->created) {
-    context->priv->other_context = other_context;
+    g_weak_ref_set (&context->priv->other_context_ref, other_context);
     context->priv->error = error;
 
     context->priv->gl_thread = g_thread_new ("gstglcontext",
@@ -711,7 +825,7 @@
   g_mutex_lock (&context->priv->render_lock);
 
   error = context->priv->error;
-  other_context = context->priv->other_context;
+  other_context = g_weak_ref_get (&context->priv->other_context_ref);
 
   context_class = GST_GL_CONTEXT_GET_CLASS (context);
   window_class = GST_GL_WINDOW_GET_CLASS (context->window);
@@ -871,6 +985,9 @@
 
 failure:
   {
+    if (other_context)
+      gst_object_unref (other_context);
+
     g_cond_signal (&context->priv->create_cond);
     g_mutex_unlock (&context->priv->render_lock);
     return NULL;
@@ -884,6 +1001,8 @@
  * Gets the backing OpenGL context used by @context.
  *
  * Returns: The platform specific backing OpenGL context
+ *
+ * Since: 1.4
  */
 guintptr
 gst_gl_context_get_gl_context (GstGLContext * context)
@@ -907,6 +1026,8 @@
  * Gets the OpenGL platform that used by @context.
  *
  * Returns: The platform specific backing OpenGL context
+ *
+ * Since: 1.4
  */
 GstGLPlatform
 gst_gl_context_get_gl_platform (GstGLContext * context)
@@ -925,6 +1046,8 @@
  * @context: a #GstGLContext:
  *
  * Returns: the #GstGLDisplay associated with this @context
+ *
+ * Since: 1.4
  */
 GstGLDisplay *
 gst_gl_context_get_display (GstGLContext * context)
@@ -958,6 +1081,8 @@
  * Execute @func in the OpenGL thread of @context with @data
  *
  * MT-safe
+ *
+ * Since: 1.4
  */
 void
 gst_gl_context_thread_add (GstGLContext * context,
@@ -991,6 +1116,8 @@
  * Returns the OpenGL version implemented by @context.  See
  * gst_gl_context_get_gl_api() for retreiving the OpenGL api implemented by
  * @context.
+ *
+ * Since: 1.4
  */
 void
 gst_gl_context_get_gl_version (GstGLContext * context, gint * maj, gint * min)
@@ -1014,6 +1141,8 @@
  *
  * Returns: whether OpenGL context implements the required api and specified
  * version.
+ *
+ * Since: 1.4
  */
 gboolean
 gst_gl_context_check_gl_version (GstGLContext * context, GstGLAPI api,
@@ -1045,6 +1174,8 @@
  * determine their existence and so will fail if that is not the case.
  *
  * Returns: Whether @feature is supported by @context
+ *
+ * Since: 1.4
  */
 gboolean
 gst_gl_context_check_feature (GstGLContext * context, const gchar * feature)
diff --git a/gst-libs/gst/gl/gstglcontext.h b/gst-libs/gst/gl/gstglcontext.h
index 999b86a..7d6a842 100644
--- a/gst-libs/gst/gl/gstglcontext.h
+++ b/gst-libs/gst/gl/gstglcontext.h
@@ -120,12 +120,14 @@
                                            GstGLAPI available_apis);
 
 gboolean      gst_gl_context_activate         (GstGLContext *context, gboolean activate);
+GThread *     gst_gl_context_get_thread       (GstGLContext *context);
 
 GstGLDisplay * gst_gl_context_get_display (GstGLContext *context);
 gpointer      gst_gl_context_get_proc_address (GstGLContext *context, const gchar *name);
 GstGLPlatform gst_gl_context_get_gl_platform  (GstGLContext *context);
 GstGLAPI      gst_gl_context_get_gl_api       (GstGLContext *context);
 guintptr      gst_gl_context_get_gl_context   (GstGLContext *context);
+gboolean      gst_gl_context_can_share        (GstGLContext * context, GstGLContext *other_context);
 
 gboolean      gst_gl_context_create           (GstGLContext *context, GstGLContext *other_context, GError ** error);
 
diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
index c57e924..6b7b835 100644
--- a/gst-libs/gst/gl/gstgldisplay.c
+++ b/gst-libs/gst/gl/gstgldisplay.c
@@ -124,6 +124,8 @@
  * gst_gl_display_new:
  *
  * Returns: (transfer full): a new #GstGLDisplay
+ *
+ * Since: 1.4
  */
 GstGLDisplay *
 gst_gl_display_new (void)
@@ -195,6 +197,8 @@
  * @display: a #GstGLDisplay
  *
  * Returns: the #GstGLDisplayType of @display
+ *
+ * Since: 1.4
  */
 GstGLDisplayType
 gst_gl_display_get_handle_type (GstGLDisplay * display)
@@ -210,6 +214,8 @@
  * @display: resulting #GstGLDisplay
  *
  * Sets @display on @context
+ *
+ * Since: 1.4
  */
 void
 gst_context_set_gl_display (GstContext * context, GstGLDisplay * display)
@@ -232,6 +238,8 @@
  * @display: resulting #GstGLDisplay
  *
  * Returns: Whether @display was in @context
+ *
+ * Since: 1.4
  */
 gboolean
 gst_context_get_gl_display (GstContext * context, GstGLDisplay ** display)
diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c
index e8c8710..26bf3f9 100644
--- a/gst-libs/gst/gl/gstglfilter.c
+++ b/gst-libs/gst/gl/gstglfilter.c
@@ -245,6 +245,8 @@
 {
   GstGLFilterClass *filter_class = GST_GL_FILTER_GET_CLASS (filter);
 
+  gst_caps_replace (&filter->out_caps, NULL);
+
   if (filter->upload) {
     gst_object_unref (filter->upload);
     filter->upload = NULL;
@@ -823,6 +825,8 @@
       goto error;
   }
 
+  gst_caps_replace (&filter->out_caps, outcaps);
+
   GST_DEBUG ("set_caps %dx%d", GST_VIDEO_INFO_WIDTH (&filter->out_info),
       GST_VIDEO_INFO_HEIGHT (&filter->out_info));
 
@@ -905,6 +909,10 @@
 
     if (decide_pool && GST_IS_GL_BUFFER_POOL (decide_pool)
         && gst_caps_is_equal_fixed (decide_caps, caps)) {
+      config = gst_buffer_pool_get_config (pool);
+      gst_buffer_pool_config_get_params (config, NULL, &size, NULL, NULL);
+      gst_structure_free (config);
+
       pool = decide_pool;
     } else {
       GST_DEBUG_OBJECT (filter, "create new pool");
@@ -1170,24 +1178,29 @@
   GstGLFilterClass *filter_class;
   guint in_tex, out_tex;
   GstVideoFrame out_frame;
-  gboolean ret, out_gl_mem;
-  GstVideoGLTextureUploadMeta *out_tex_upload_meta;
+  gboolean ret;
+  gboolean to_download =
+      gst_caps_features_is_equal (GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY,
+      gst_caps_get_features (filter->out_caps, 0));
+  GstMapFlags out_map_flags = GST_MAP_WRITE;
 
   filter_class = GST_GL_FILTER_GET_CLASS (filter);
 
   if (!gst_gl_upload_perform_with_buffer (filter->upload, inbuf, &in_tex))
     return FALSE;
 
+  to_download |= !gst_is_gl_memory (gst_buffer_peek_memory (outbuf, 0));
+
+  if (!to_download)
+    out_map_flags |= GST_MAP_GL;
+
   if (!gst_video_frame_map (&out_frame, &filter->out_info, outbuf,
-          GST_MAP_WRITE | GST_MAP_GL)) {
+          out_map_flags)) {
     ret = FALSE;
     goto inbuf_error;
   }
 
-  out_gl_mem = gst_is_gl_memory (out_frame.map[0].memory);
-  out_tex_upload_meta = gst_buffer_get_video_gl_texture_upload_meta (outbuf);
-
-  if (out_gl_mem) {
+  if (!to_download) {
     out_tex = *(guint *) out_frame.data[0];
   } else {
     GST_LOG ("Output Buffer does not contain correct memory, "
@@ -1197,6 +1210,7 @@
       filter->download = gst_gl_download_new (filter->context);
 
     gst_gl_download_set_format (filter->download, &out_frame.info);
+
     out_tex = filter->out_tex_id;
   }
 
@@ -1206,7 +1220,7 @@
   g_assert (filter_class->filter_texture);
   ret = filter_class->filter_texture (filter, in_tex, out_tex);
 
-  if (!out_gl_mem && !out_tex_upload_meta) {
+  if (to_download) {
     if (!gst_gl_download_perform_with_data (filter->download, out_tex,
             out_frame.data)) {
       GST_ELEMENT_ERROR (filter, RESOURCE, NOT_FOUND,
diff --git a/gst-libs/gst/gl/gstglfilter.h b/gst-libs/gst/gl/gstglfilter.h
index 6e77022..c786493 100644
--- a/gst-libs/gst/gl/gstglfilter.h
+++ b/gst-libs/gst/gl/gstglfilter.h
@@ -68,6 +68,9 @@
 
   GstVideoInfo       in_info;
   GstVideoInfo       out_info;
+
+  GstCaps           *out_caps;
+
   GLuint             fbo;
   GLuint             depthbuffer;
 
diff --git a/gst-libs/gst/gl/gstglmemory.c b/gst-libs/gst/gl/gstglmemory.c
index 64314e6..87d57cb 100644
--- a/gst-libs/gst/gl/gstglmemory.c
+++ b/gst-libs/gst/gl/gstglmemory.c
@@ -661,8 +661,10 @@
   if ((gl_mem->map_flags & GST_MAP_WRITE) == GST_MAP_WRITE) {
     if ((gl_mem->map_flags & GST_MAP_GL) == GST_MAP_GL) {
       GST_GL_MEMORY_FLAG_SET (gl_mem, GST_GL_MEMORY_FLAG_NEED_DOWNLOAD);
+      GST_GL_MEMORY_FLAG_UNSET (gl_mem, GST_GL_MEMORY_FLAG_NEED_UPLOAD);
     } else {
       GST_GL_MEMORY_FLAG_SET (gl_mem, GST_GL_MEMORY_FLAG_NEED_UPLOAD);
+      GST_GL_MEMORY_FLAG_UNSET (gl_mem, GST_GL_MEMORY_FLAG_NEED_DOWNLOAD);
     }
   }
 
diff --git a/gst-libs/gst/gl/gstglshadervariables.c b/gst-libs/gst/gl/gstglshadervariables.c
index 325a71f..4ca2efe 100644
--- a/gst-libs/gst/gl/gstglshadervariables.c
+++ b/gst-libs/gst/gl/gstglshadervariables.c
@@ -254,12 +254,12 @@
       trimright (t, " \t");
 
       if (arraysize) {
-        char *s = g_malloc (strlen (vartype) + 32);
-        sprintf (s, "%s[%d]", vartype, arraysize);
+        gchar *s = g_strdup_printf ("%s[%d]", vartype, arraysize);
         if (strcmp (t, s)) {
           g_free (s);
           goto parse_error;
         }
+        g_free (s);
       } else {
         if (strcmp (t, vartype))
           goto parse_error;
diff --git a/gst-libs/gst/gl/gstglupload.c b/gst-libs/gst/gl/gstglupload.c
index 133fdd5..ecf6ebb 100644
--- a/gst-libs/gst/gl/gstglupload.c
+++ b/gst-libs/gst/gl/gstglupload.c
@@ -250,6 +250,11 @@
   mem = gst_buffer_peek_memory (buffer, 0);
 
   if (gst_is_gl_memory (mem)) {
+    GstGLMemory *gl_mem = (GstGLMemory *) gst_buffer_peek_memory (buffer, 0);
+
+    if (!gst_gl_context_can_share (upload->context, gl_mem->context))
+      goto raw_data_upload;
+
     if (GST_VIDEO_INFO_FORMAT (&upload->in_info) == GST_VIDEO_FORMAT_RGBA) {
       GstMapInfo map_info;
 
@@ -302,6 +307,7 @@
     }
   }
 
+raw_data_upload:
   GST_LOG_OBJECT (upload, "Attempting upload with raw data");
   /* GstVideoMeta map */
   if (!gst_video_frame_map (&upload->priv->frame, &upload->in_info, buffer,
diff --git a/gst-libs/gst/gl/gstglwindow.c b/gst-libs/gst/gl/gstglwindow.c
index 117cfa6..a35ca05 100644
--- a/gst-libs/gst/gl/gstglwindow.c
+++ b/gst-libs/gst/gl/gstglwindow.c
@@ -138,6 +138,8 @@
  * @display: a #GstGLDisplay
  *
  * Returns: (transfer full): a new #GstGLWindow using @display's connection
+ *
+ * Since: 1.4
  */
 GstGLWindow *
 gst_gl_window_new (GstGLDisplay * display)
@@ -218,6 +220,8 @@
  *
  * Sets the window that this @window should render into.  Some implementations
  * require this to be called with a valid handle before drawing can commence.
+ *
+ * Since: 1.4
  */
 void
 gst_gl_window_set_window_handle (GstGLWindow * window, guintptr handle)
@@ -239,6 +243,8 @@
  * @height: requested height of the window
  *
  * Redraw the window contents.  Implementations should invoke the draw callback.
+ *
+ * Since: 1.4
  */
 void
 gst_gl_window_draw_unlocked (GstGLWindow * window, guint width, guint height)
@@ -259,6 +265,8 @@
  * @height: requested height of the window
  *
  * Redraw the window contents.  Implementations should invoke the draw callback.
+ *
+ * Since: 1.4
  */
 void
 gst_gl_window_draw (GstGLWindow * window, guint width, guint height)
@@ -282,6 +290,8 @@
  * @window: a #GstGLWindow
  *
  * Start the execution of the runloop.
+ *
+ * Since: 1.4
  */
 void
 gst_gl_window_run (GstGLWindow * window)
@@ -301,6 +311,8 @@
  * @window: a #GstGLWindow
  *
  * Quit the runloop's execution.
+ *
+ * Since: 1.4
  */
 void
 gst_gl_window_quit (GstGLWindow * window)
@@ -379,6 +391,8 @@
  *
  * Invoke @callback with data on the window thread.  @callback is guarenteed to
  * have executed when this function returns.
+ *
+ * Since: 1.4
  */
 void
 gst_gl_window_send_message (GstGLWindow * window, GstGLWindowCB callback,
@@ -403,6 +417,8 @@
  *
  * Invoke @callback with @data on the window thread.  The callback may not
  * have been executed when this function returns.
+ *
+ * Since: 1.4
  */
 void
 gst_gl_window_send_message_async (GstGLWindow * window, GstGLWindowCB callback,
@@ -426,6 +442,8 @@
  * @destroy_notify: (destroy): called when @data is not needed any more
  *
  * Sets the draw callback called everytime gst_gl_window_draw() is called
+ *
+ * Since: 1.4
  */
 void
 gst_gl_window_set_draw_callback (GstGLWindow * window, GstGLWindowCB callback,
@@ -453,6 +471,8 @@
  * @destroy_notify: (destroy): called when @data is not needed any more
  *
  * Sets the resize callback called everytime a resize of the window occurs.
+ *
+ * Since: 1.4
  */
 void
 gst_gl_window_set_resize_callback (GstGLWindow * window,
@@ -480,6 +500,8 @@
  * @destroy_notify: (destroy): called when @data is not needed any more
  *
  * Sets the callback called when the window is about to close.
+ *
+ * Since: 1.4
  */
 void
 gst_gl_window_set_close_callback (GstGLWindow * window, GstGLWindowCB callback,
@@ -504,6 +526,8 @@
  * @window: a #GstGLWindow
  *
  * Whether the runloop is running
+ *
+ * Since: 1.4
  */
 gboolean
 gst_gl_window_is_running (GstGLWindow * window)
@@ -516,6 +540,8 @@
  * @window: a #GstGLWindow
  *
  * Returns: the windowing system display handle for this @window
+ *
+ * Since: 1.4
  */
 guintptr
 gst_gl_window_get_display (GstGLWindow * window)
@@ -534,6 +560,8 @@
  * @window: a #GstGLWindow
  *
  * Returns: the window handle we are currently rendering into
+ *
+ * Since: 1.4
  */
 guintptr
 gst_gl_window_get_window_handle (GstGLWindow * window)
@@ -552,6 +580,8 @@
  * @window: a #GstGLWindow
  *
  * Returns: (transfer full): the #GstGLContext associated with this @window
+ *
+ * Since: 1.4
  */
 GstGLContext *
 gst_gl_window_get_context (GstGLWindow * window)
diff --git a/gst-libs/gst/video/bad-video-orc-dist.c b/gst-libs/gst/video/bad-video-orc-dist.c
index d60b72e..168359f 100644
--- a/gst-libs/gst/video/bad-video-orc-dist.c
+++ b/gst-libs/gst/video/bad-video-orc-dist.c
@@ -336,7 +336,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 31, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 109, 101, 109, 99, 112,
-        121,
+            121,
         95, 50, 100, 11, 1, 1, 12, 1, 1, 42, 0, 4, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
@@ -557,7 +557,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110,
         118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114,
-        116,
+            116,
         95, 73, 52, 50, 48, 95, 85, 89, 86, 89, 11, 4, 4, 11, 4, 4,
         12, 2, 2, 12, 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32,
         6, 7, 21, 1, 196, 0, 32, 4, 21, 1, 196, 1, 32, 5, 2, 0,
@@ -790,7 +790,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110,
         118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114,
-        116,
+            116,
         95, 73, 52, 50, 48, 95, 89, 85, 89, 50, 11, 4, 4, 11, 4, 4,
         12, 2, 2, 12, 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32,
         6, 7, 21, 1, 196, 0, 4, 32, 21, 1, 196, 1, 5, 32, 2, 0,
@@ -1059,7 +1059,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110,
         118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114,
-        116,
+            116,
         95, 73, 52, 50, 48, 95, 65, 89, 85, 86, 11, 4, 4, 11, 4, 4,
         12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0,
         0, 0, 20, 2, 20, 2, 20, 1, 20, 1, 45, 34, 6, 45, 35, 7,
@@ -1315,7 +1315,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110,
         118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114,
-        116,
+            116,
         95, 89, 85, 89, 50, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2,
         11, 1, 1, 11, 1, 1, 12, 4, 4, 12, 4, 4, 20, 2, 20, 2,
         20, 2, 21, 1, 199, 32, 34, 4, 97, 0, 34, 21, 1, 199, 33, 34,
@@ -1458,7 +1458,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 85, 89, 86, 89, 95, 89, 85, 89, 50, 11, 4, 4, 12, 4,
         4, 21, 1, 183, 0, 4, 2, 0,
       };
@@ -1602,7 +1602,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 43, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97,
-        114,
+            114,
         95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 48, 95, 52, 50, 50, 11,
         1, 1, 11, 1, 1, 12, 1, 1, 42, 0, 4, 42, 1, 4, 2, 0,
 
@@ -1740,7 +1740,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 43, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97,
-        114,
+            114,
         95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 48, 95, 52, 52, 52, 11,
         2, 2, 11, 2, 2, 12, 1, 1, 20, 2, 151, 32, 4, 97, 0, 32,
         97, 1, 32, 2, 0,
@@ -1871,7 +1871,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 43, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97,
-        114,
+            114,
         95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 50, 95, 52, 52, 52, 11,
         2, 2, 12, 1, 1, 20, 2, 151, 32, 4, 97, 0, 32, 2, 0,
       };
@@ -2014,7 +2014,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 43, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97,
-        114,
+            114,
         95, 99, 104, 114, 111, 109, 97, 95, 52, 52, 52, 95, 52, 50, 50, 11,
         1, 1, 12, 2, 2, 20, 1, 20, 1, 199, 32, 33, 4, 39, 0, 32,
         33, 2, 0,
@@ -2183,7 +2183,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 43, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97,
-        114,
+            114,
         95, 99, 104, 114, 111, 109, 97, 95, 52, 52, 52, 95, 52, 50, 48, 11,
         1, 1, 12, 2, 2, 12, 2, 2, 20, 2, 20, 1, 20, 1, 21, 1,
         39, 32, 4, 5, 199, 33, 34, 32, 39, 0, 33, 34, 2, 0,
@@ -2328,7 +2328,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 43, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97,
-        114,
+            114,
         95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 50, 95, 52, 50, 48, 11,
         1, 1, 12, 1, 1, 12, 1, 1, 39, 0, 4, 5, 2, 0,
       };
@@ -2564,7 +2564,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 89, 85, 89, 50, 95, 65, 89, 85, 86, 11, 8, 8, 12, 4,
         4, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21,
         1, 199, 33, 32, 4, 21, 1, 196, 34, 16, 32, 195, 35, 33, 33, 21,
@@ -2810,7 +2810,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 85, 89, 86, 89, 95, 65, 89, 85, 86, 11, 8, 8, 12, 4,
         4, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21,
         1, 199, 32, 33, 4, 21, 1, 196, 34, 16, 32, 195, 35, 33, 33, 21,
@@ -3006,7 +3006,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 89, 85, 89, 50, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1,
         1, 11, 1, 1, 12, 4, 4, 20, 2, 21, 1, 199, 32, 0, 4, 199,
         2, 1, 32, 2, 0,
@@ -3199,7 +3199,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 85, 89, 86, 89, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1,
         1, 11, 1, 1, 12, 4, 4, 20, 2, 21, 1, 199, 0, 32, 4, 199,
         2, 1, 32, 2, 0,
@@ -3404,7 +3404,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 89, 85, 89, 50, 95, 89, 52, 52, 52, 11, 2, 2, 11, 2,
         2, 11, 2, 2, 12, 4, 4, 20, 2, 20, 1, 20, 1, 21, 1, 199,
         32, 0, 4, 199, 34, 33, 32, 151, 1, 33, 151, 2, 34, 2, 0,
@@ -3615,7 +3615,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 85, 89, 86, 89, 95, 89, 52, 52, 52, 11, 2, 2, 11, 2,
         2, 11, 2, 2, 12, 4, 4, 20, 2, 20, 1, 20, 1, 21, 1, 199,
         0, 32, 4, 199, 34, 33, 32, 151, 1, 33, 151, 2, 34, 2, 0,
@@ -3863,7 +3863,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110,
         118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114,
-        116,
+            116,
         95, 85, 89, 86, 89, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2,
         11, 1, 1, 11, 1, 1, 12, 4, 4, 12, 4, 4, 20, 2, 20, 2,
         20, 2, 21, 1, 199, 34, 32, 4, 97, 0, 34, 21, 1, 199, 34, 33,
@@ -4244,7 +4244,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 65, 89, 85, 86, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2,
         2, 11, 1, 1, 11, 1, 1, 12, 8, 8, 12, 8, 8, 20, 4, 20,
         4, 20, 4, 20, 4, 20, 2, 20, 2, 20, 1, 20, 1, 21, 1, 198,
@@ -4514,7 +4514,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 65, 89, 85, 86, 95, 89, 85, 89, 50, 11, 4, 4, 12, 8,
         8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35,
         4, 198, 33, 34, 36, 21, 1, 39, 33, 33, 34, 21, 1, 189, 32, 35,
@@ -4756,7 +4756,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 65, 89, 85, 86, 95, 85, 89, 86, 89, 11, 4, 4, 12, 8,
         8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35,
         4, 198, 33, 34, 36, 21, 1, 39, 33, 33, 34, 21, 1, 189, 32, 35,
@@ -5008,7 +5008,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 65, 89, 85, 86, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1,
         1, 11, 1, 1, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 21,
         1, 198, 33, 32, 4, 198, 34, 35, 33, 21, 1, 39, 34, 34, 35, 199,
@@ -5213,7 +5213,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 65, 89, 85, 86, 95, 89, 52, 52, 52, 11, 1, 1, 11, 1,
         1, 11, 1, 1, 12, 4, 4, 20, 2, 20, 2, 198, 33, 32, 4, 199,
         2, 1, 33, 189, 0, 32, 2, 0,
@@ -5409,7 +5409,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 89, 52, 50, 66, 95, 89, 85, 89, 50, 11, 4, 4, 12, 2,
         2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 5, 6, 21, 1, 196,
         0, 4, 32, 2, 0,
@@ -5602,7 +5602,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 89, 52, 50, 66, 95, 85, 89, 86, 89, 11, 4, 4, 12, 2,
         2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 5, 6, 21, 1, 196,
         0, 32, 4, 2, 0,
@@ -5855,7 +5855,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 89, 52, 50, 66, 95, 65, 89, 85, 86, 11, 8, 8, 12, 2,
         2, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20,
         2, 20, 4, 20, 4, 196, 32, 5, 6, 21, 1, 196, 35, 16, 4, 195,
@@ -6099,7 +6099,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 89, 52, 52, 52, 95, 89, 85, 89, 50, 11, 4, 4, 12, 2,
         2, 12, 2, 2, 12, 2, 2, 20, 2, 20, 4, 20, 2, 20, 2, 21,
         1, 196, 33, 5, 6, 198, 34, 35, 33, 21, 1, 39, 32, 34, 35, 21,
@@ -6342,7 +6342,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 89, 52, 52, 52, 95, 85, 89, 86, 89, 11, 4, 4, 12, 2,
         2, 12, 2, 2, 12, 2, 2, 20, 2, 20, 4, 20, 2, 20, 2, 21,
         1, 196, 33, 5, 6, 198, 34, 35, 33, 21, 1, 39, 32, 34, 35, 21,
@@ -6561,7 +6561,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 89, 52, 52, 52, 95, 65, 89, 85, 86, 11, 4, 4, 12, 1,
         1, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20,
         2, 196, 32, 5, 6, 196, 33, 16, 4, 195, 0, 33, 32, 2, 0,
@@ -6978,7 +6978,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 65, 89, 85, 86, 95, 65, 82, 71, 66, 11, 4, 4, 12, 4,
         4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16,
         2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20,
@@ -7458,7 +7458,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 65, 89, 85, 86, 95, 66, 71, 82, 65, 11, 4, 4, 12, 4,
         4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16,
         2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20,
@@ -7938,7 +7938,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 65, 89, 85, 86, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4,
         4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16,
         2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20,
@@ -8418,7 +8418,7 @@
       static const orc_uint8 bc[] = {
         1, 7, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111,
         110, 118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101,
-        114,
+            114,
         116, 95, 65, 89, 85, 86, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4,
         4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16,
         2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20,
@@ -8901,7 +8901,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 39, 98, 97, 100, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110,
         118, 101, 114, 116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114,
-        116,
+            116,
         95, 73, 52, 50, 48, 95, 66, 71, 82, 65, 11, 4, 4, 12, 1, 1,
         12, 1, 1, 12, 1, 1, 14, 1, 128, 0, 0, 0, 14, 4, 127, 0,
         0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2, 20, 2, 20, 2,
diff --git a/gst-libs/gst/video/gstvideoaggregator.c b/gst-libs/gst/video/gstvideoaggregator.c
index 02e485c..5d2e3f0 100644
--- a/gst-libs/gst/video/gstvideoaggregator.c
+++ b/gst-libs/gst/video/gstvideoaggregator.c
@@ -1056,6 +1056,9 @@
               converted_buf, GST_MAP_READWRITE)) {
         GST_WARNING_OBJECT (vagg, "Could not map converted frame");
 
+        g_slice_free (GstVideoFrame, converted_frame);
+        gst_video_frame_unmap (frame);
+        g_slice_free (GstVideoFrame, frame);
         return FALSE;
       }
 
@@ -1063,6 +1066,7 @@
           frame);
       pad->converted_buffer = converted_buf;
       gst_video_frame_unmap (frame);
+      g_slice_free (GstVideoFrame, frame);
     } else {
       converted_frame = frame;
       converted_buf = pad->buffer;
diff --git a/gst-plugins-bad.doap b/gst-plugins-bad.doap
index 90a3db5..f7ec8a6 100644
--- a/gst-plugins-bad.doap
+++ b/gst-plugins-bad.doap
@@ -35,6 +35,16 @@
 
  <release>
   <Version>
+   <revision>1.4.4</revision>
+   <branch>1.4</branch>
+   <name></name>
+   <created>2014-11-06</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.4.4.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.4.3</revision>
    <branch>1.4</branch>
    <name></name>
diff --git a/gst-plugins-bad.spec b/gst-plugins-bad.spec
index a42d9ec..8179ece 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.4.3
+Version: 1.4.4
 Release: 1.gst
 # The freeze and nfs plugins are LGPLv2 (only)
 License: LGPLv2+ and LGPLv2
diff --git a/gst/bayer/gstbayerorc-dist.c b/gst/bayer/gstbayerorc-dist.c
index 1dc708d..2165615 100644
--- a/gst/bayer/gstbayerorc-dist.c
+++ b/gst/bayer/gstbayerorc-dist.c
@@ -336,7 +336,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 34, 98, 97, 121, 101, 114, 95, 111, 114, 99, 95, 104, 111, 114,
         105, 122, 95, 117, 112, 115, 97, 109, 112, 108, 101, 95, 117, 110, 97,
-        108,
+            108,
         105, 103, 110, 101, 100, 11, 2, 2, 11, 2, 2, 12, 2, 2, 14, 4,
         1, 0, 0, 0, 20, 2, 20, 1, 20, 1, 20, 1, 20, 1, 199, 34,
         33, 4, 83, 32, 4, 16, 199, 36, 35, 32, 39, 36, 34, 36, 196, 0,
diff --git a/gst/fieldanalysis/gstfieldanalysisorc-dist.c b/gst/fieldanalysis/gstfieldanalysisorc-dist.c
index 06951b7..f50df64 100644
--- a/gst/fieldanalysis/gstfieldanalysisorc-dist.c
+++ b/gst/fieldanalysis/gstfieldanalysisorc-dist.c
@@ -283,7 +283,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 44, 102, 105, 101, 108, 100, 97, 110, 97, 108, 121, 115, 105, 115,
         95, 111, 114, 99, 95, 115, 97, 109, 101, 95, 112, 97, 114, 105, 116,
-        121,
+            121,
         95, 115, 97, 100, 95, 112, 108, 97, 110, 97, 114, 95, 121, 117, 118, 12,
         1, 1, 12, 1, 1, 13, 4, 16, 4, 20, 2, 20, 2, 20, 4, 20,
         4, 150, 32, 4, 150, 33, 5, 98, 32, 32, 33, 69, 32, 32, 154, 34,
@@ -466,9 +466,9 @@
       static const orc_uint8 bc[] = {
         1, 9, 44, 102, 105, 101, 108, 100, 97, 110, 97, 108, 121, 115, 105, 115,
         95, 111, 114, 99, 95, 115, 97, 109, 101, 95, 112, 97, 114, 105, 116,
-        121,
+            121,
         95, 115, 115, 100, 95, 112, 108, 97, 110, 97, 114, 95, 121, 117, 118,
-        12,
+            12,
         1, 1, 12, 1, 1, 13, 4, 16, 4, 20, 2, 20, 2, 20, 4, 20,
         4, 150, 32, 4, 150, 33, 5, 98, 32, 32, 33, 176, 34, 32, 32, 111,
         35, 34, 24, 106, 34, 34, 35, 181, 12, 34, 2, 0,
@@ -758,7 +758,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 46, 102, 105, 101, 108, 100, 97, 110, 97, 108, 121, 115, 105, 115,
         95, 111, 114, 99, 95, 115, 97, 109, 101, 95, 112, 97, 114, 105, 116,
-        121,
+            121,
         95, 51, 95, 116, 97, 112, 95, 112, 108, 97, 110, 97, 114, 95, 121, 117,
         118, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1,
         12, 1, 1, 13, 4, 14, 4, 2, 0, 0, 0, 16, 4, 20, 2, 20,
@@ -1099,7 +1099,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 50, 102, 105, 101, 108, 100, 97, 110, 97, 108, 121, 115, 105, 115,
         95, 111, 114, 99, 95, 111, 112, 112, 111, 115, 105, 116, 101, 95, 112,
-        97,
+            97,
         114, 105, 116, 121, 95, 53, 95, 116, 97, 112, 95, 112, 108, 97, 110, 97,
         114, 95, 121, 117, 118, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1,
         1, 12, 1, 1, 13, 4, 14, 4, 2, 0, 0, 0, 14, 4, 3, 0,
diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c
index 0ca7253..9ec977a 100644
--- a/gst/mpegtsdemux/mpegtsbase.c
+++ b/gst/mpegtsdemux/mpegtsbase.c
@@ -1016,15 +1016,6 @@
   return TRUE;
 }
 
-static gboolean
-gst_mpegts_base_handle_eos (MpegTSBase * base)
-{
-  g_hash_table_foreach_remove (base->programs, (GHRFunc) remove_each_program,
-      base);
-  /* finally remove  */
-  return TRUE;
-}
-
 static inline GstFlowReturn
 mpegts_base_drain (MpegTSBase * base)
 {
@@ -1075,10 +1066,6 @@
     case GST_EVENT_STREAM_START:
       gst_event_unref (event);
       break;
-    case GST_EVENT_EOS:
-      res = GST_MPEGTS_BASE_GET_CLASS (base)->push_event (base, event);
-      res = gst_mpegts_base_handle_eos (base);
-      break;
     case GST_EVENT_CAPS:
       /* FIXME, do something */
       gst_event_unref (event);
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c
index 297f375..9b2debb 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -1850,7 +1850,8 @@
   } else {
     GST_WARNING ("CONTINUITY: Mismatch packet %d, stream %d",
         cc, stream->continuity_counter);
-    stream->state = PENDING_PACKET_DISCONT;
+    if (stream->state != PENDING_PACKET_EMPTY)
+      stream->state = PENDING_PACKET_DISCONT;
   }
   stream->continuity_counter = cc;
 
diff --git a/gst/rawparse/gstrawparse.c b/gst/rawparse/gstrawparse.c
index f807d9e..eff74dc 100644
--- a/gst/rawparse/gstrawparse.c
+++ b/gst/rawparse/gstrawparse.c
@@ -291,7 +291,7 @@
   GstRawParse *rp = GST_RAW_PARSE (parent);
   GstFlowReturn ret = GST_FLOW_OK;
   GstRawParseClass *rp_class = GST_RAW_PARSE_GET_CLASS (rp);
-  guint buffersize;
+  guint buffersize, available;
 
   if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))) {
     GST_DEBUG_OBJECT (rp, "received DISCONT buffer");
@@ -310,14 +310,15 @@
 
   gst_adapter_push (rp->adapter, buffer);
 
+  available = gst_adapter_available (rp->adapter);
   if (rp_class->multiple_frames_per_buffer) {
-    buffersize = gst_adapter_available (rp->adapter);
+    buffersize = available;
     buffersize -= buffersize % rp->framesize;
   } else {
     buffersize = rp->framesize;
   }
 
-  while (gst_adapter_available (rp->adapter) >= buffersize) {
+  while (buffersize > 0 && gst_adapter_available (rp->adapter) >= buffersize) {
     buffer = gst_adapter_take_buffer (rp->adapter, buffersize);
 
     ret = gst_raw_parse_push_buffer (rp, buffer);
@@ -697,8 +698,6 @@
       if (segment.format != GST_FORMAT_TIME) {
         gst_event_unref (event);
 
-        segment.format = GST_FORMAT_TIME;
-
         ret =
             gst_raw_parse_convert (rp, segment.format, segment.start,
             GST_FORMAT_TIME, (gint64 *) & segment.start);
@@ -713,6 +712,8 @@
           break;
         }
 
+        segment.format = GST_FORMAT_TIME;
+
         event = gst_event_new_segment (&segment);
       }
 
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index 697ff87..506cd61 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -1337,6 +1337,19 @@
           par_n, par_d, NULL);
     }
 
+    /* set profile and level in caps */
+    if (sps) {
+      GstMapInfo map;
+      GstBuffer *sps_buf = h264parse->sps_nals[sps->id];
+
+      if (sps_buf) {
+        gst_buffer_map (sps_buf, &map, GST_MAP_READ);
+        gst_codec_utils_h264_caps_set_level_and_profile (caps,
+            map.data + 1, map.size - 1);
+        gst_buffer_unmap (sps_buf, &map);
+      }
+    }
+
     src_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (h264parse));
 
     if (src_caps
@@ -1680,6 +1693,15 @@
 
     /* codec tag */
     caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse));
+    if (caps == NULL) {
+      if (GST_PAD_IS_FLUSHING (GST_BASE_PARSE_SRC_PAD (h264parse))) {
+        GST_INFO_OBJECT (h264parse, "Src pad is flushing");
+        return GST_FLOW_FLUSHING;
+      } else {
+        GST_INFO_OBJECT (h264parse, "Src pad is not negotiated!");
+        return GST_FLOW_NOT_NEGOTIATED;
+      }
+    }
     gst_pb_utils_add_codec_description_to_tag_list (taglist,
         GST_TAG_VIDEO_CODEC, caps);
     gst_caps_unref (caps);
diff --git a/gst/videoparsers/gsth265parse.c b/gst/videoparsers/gsth265parse.c
index caf4616..9a98dcc 100644
--- a/gst/videoparsers/gsth265parse.c
+++ b/gst/videoparsers/gsth265parse.c
@@ -1335,6 +1335,19 @@
           par_n, par_d, NULL);
     }
 
+    /* set profile and level in caps */
+    if (sps) {
+      GstMapInfo map;
+      GstBuffer *sps_buf = h265parse->sps_nals[sps->id];
+
+      if (sps_buf) {
+        gst_buffer_map (sps_buf, &map, GST_MAP_READ);
+        gst_codec_utils_h265_caps_set_level_tier_and_profile (caps,
+            map.data + 1, map.size - 1);
+        gst_buffer_unmap (sps_buf, &map);
+      }
+    }
+
     src_caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (h265parse));
 
     if (src_caps
diff --git a/gst/videoparsers/gstvc1parse.c b/gst/videoparsers/gstvc1parse.c
index 54695ec..02e2d0f 100644
--- a/gst/videoparsers/gstvc1parse.c
+++ b/gst/videoparsers/gstvc1parse.c
@@ -115,6 +115,16 @@
   "frame-layer", VC1_STREAM_FORMAT_FRAME_LAYER}
 };
 
+static const struct
+{
+  gchar str[5];
+  GstVC1ParseFormat en;
+} parse_formats[] = {
+  {
+  "WMV3", GST_VC1_PARSE_FORMAT_WMV3}, {
+  "WVC1", GST_VC1_PARSE_FORMAT_WVC1}
+};
+
 static const gchar *
 stream_format_to_string (VC1StreamFormat stream_format)
 {
@@ -151,6 +161,12 @@
   return -1;
 }
 
+static const gchar *
+parse_format_to_string (GstVC1ParseFormat format)
+{
+  return parse_formats[format].str;
+}
+
 static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
@@ -300,7 +316,9 @@
 static gboolean
 gst_vc1_parse_renegotiate (GstVC1Parse * vc1parse)
 {
+  GstCaps *in_caps;
   GstCaps *allowed_caps;
+  GstCaps *tmp;
 
   /* Negotiate with downstream here */
   GST_DEBUG_OBJECT (vc1parse, "Renegotiating");
@@ -314,9 +332,25 @@
     GST_DEBUG_OBJECT (vc1parse, "Downstream allowed caps: %" GST_PTR_FORMAT,
         allowed_caps);
 
-    allowed_caps = gst_caps_make_writable (allowed_caps);
-    allowed_caps = gst_caps_truncate (allowed_caps);
-    s = gst_caps_get_structure (allowed_caps, 0);
+    /* Downstream element can have differents caps according to wmv format
+     * so intersect to select the good caps */
+    in_caps = gst_caps_new_simple ("video/x-wmv",
+        "format", G_TYPE_STRING, parse_format_to_string (vc1parse->format),
+        NULL);
+
+    tmp = gst_caps_intersect_full (allowed_caps, in_caps,
+        GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (in_caps);
+
+    if (gst_caps_is_empty (tmp)) {
+      GST_ERROR_OBJECT (vc1parse, "Empty caps, downstream doesn't support %s",
+          parse_format_to_string (vc1parse->format));
+      gst_caps_unref (tmp);
+      return FALSE;
+    }
+
+    tmp = gst_caps_make_writable (tmp);
+    s = gst_caps_get_structure (tmp, 0);
 
     /* If already fixed this does nothing */
     gst_structure_fixate_field_string (s, "header-format", "asf");
@@ -343,8 +377,10 @@
       vc1parse->output_stream_format =
           stream_format_from_string (stream_format);
     }
+    gst_caps_unref (tmp);
   } else if (gst_caps_is_empty (allowed_caps)) {
     GST_ERROR_OBJECT (vc1parse, "Empty caps");
+    gst_caps_unref (allowed_caps);
     return FALSE;
   } else {
     GST_DEBUG_OBJECT (vc1parse, "Using input header/stream format");
@@ -862,6 +898,14 @@
   return TRUE;
 }
 
+static inline void
+calculate_mb_size (GstVC1SeqHdr * seqhdr, guint width, guint height)
+{
+  seqhdr->mb_width = (width + 15) >> 4;
+  seqhdr->mb_height = (height + 15) >> 4;
+  seqhdr->mb_stride = seqhdr->mb_width + 1;
+}
+
 static gboolean
 gst_vc1_parse_handle_bdu (GstVC1Parse * vc1parse, GstVC1StartCode startcode,
     GstBuffer * buffer, guint offset, guint size)
@@ -1051,7 +1095,7 @@
     /* frame-layer or sequence-layer-frame-layer */
     g_assert (size >= 8);
     /* Parse frame layer size */
-    framesize = GST_READ_UINT24_LE (data + 1) + 8;
+    framesize = GST_READ_UINT24_LE (data) + 8;
   }
 
 
@@ -1172,6 +1216,34 @@
         /* Must be a frame or a frame + field */
         /* TODO: Check if keyframe */
       }
+    } else {
+      /* In simple/main, we basically have a raw frame, so parse it */
+      GstVC1ParserResult pres;
+      GstVC1FrameHdr frame_hdr;
+      GstVC1SeqHdr seq_hdr;
+
+      if (!vc1parse->seq_hdr_buffer) {
+        /* Build seq_hdr from sequence-layer to be able to parse frame */
+        seq_hdr.profile = vc1parse->profile;
+        seq_hdr.struct_c = vc1parse->seq_layer.struct_c;
+        calculate_mb_size (&seq_hdr, vc1parse->seq_layer.struct_a.horiz_size,
+            vc1parse->seq_layer.struct_a.vert_size);
+      } else {
+        seq_hdr = vc1parse->seq_hdr;
+      }
+
+      pres = gst_vc1_parse_frame_header (data, size, &frame_hdr,
+          &seq_hdr, NULL);
+      if (pres != GST_VC1_PARSER_OK) {
+        GST_ERROR_OBJECT (vc1parse, "Invalid VC1 frame header");
+        ret = GST_FLOW_ERROR;
+        goto done;
+      }
+
+      if (frame_hdr.ptype == GST_VC1_PICTURE_TYPE_I)
+        GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
+      else
+        GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
     }
     ret = GST_FLOW_OK;
   } else {
@@ -1772,9 +1844,7 @@
     gst_buffer_unmap (codec_data, &minfo);
   } else {
     vc1parse->input_header_format = VC1_HEADER_FORMAT_NONE;
-    if (header_format && strcmp (header_format, "sequence-layer") != 0)
-      vc1parse->input_header_format = VC1_HEADER_FORMAT_SEQUENCE_LAYER;
-    else if (header_format && strcmp (header_format, "none") != 0)
+    if (header_format && strcmp (header_format, "none") != 0)
       GST_WARNING_OBJECT (vc1parse,
           "Upstream claimed '%s' header format but 'none' detected",
           header_format);
diff --git a/gst/videoparsers/gstvc1parse.h b/gst/videoparsers/gstvc1parse.h
index 6d97ec8..28c3c4f 100644
--- a/gst/videoparsers/gstvc1parse.h
+++ b/gst/videoparsers/gstvc1parse.h
@@ -56,7 +56,7 @@
 } VC1StreamFormat;
 
 typedef enum {
-  GST_VC1_PARSE_FORMAT_WMV3,
+  GST_VC1_PARSE_FORMAT_WMV3 = 0,
   GST_VC1_PARSE_FORMAT_WVC1
 } GstVC1ParseFormat;
 
diff --git a/ltmain.sh b/ltmain.sh
index 3fd54df..bffda54 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -70,7 +70,7 @@
 #         compiler:		$LTCC
 #         compiler flags:		$LTCFLAGS
 #         linker:		$LD (gnu? $with_gnu_ld)
-#         $progname:	(GNU libtool) 2.4.2 Debian-2.4.2-1.10
+#         $progname:	(GNU libtool) 2.4.2 Debian-2.4.2-1.11
 #         automake:	$automake_version
 #         autoconf:	$autoconf_version
 #
@@ -80,7 +80,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.2 Debian-2.4.2-1.10"
+VERSION="2.4.2 Debian-2.4.2-1.11"
 TIMESTAMP=""
 package_revision=1.3337
 
diff --git a/po/af.gmo b/po/af.gmo
index b6017fd..1bfc47b 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 2cf9fe0..9cc411e 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2004-03-18 14:16+0200\n"
 "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
 "Language-Team: Afrikaans <i18n@af.org.za>\n"
diff --git a/po/az.gmo b/po/az.gmo
index 0010e78..9240759 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 12ad2ba..5b66436 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2004-03-19 18:29+0200\n"
 "Last-Translator: Metin Amiroff <metin@karegen.com>\n"
 "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
diff --git a/po/bg.gmo b/po/bg.gmo
index 3c6e96e..b2e52ee 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 9376de6..ee0e06b 100644
--- a/po/bg.po
+++ b/po/bg.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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2011-04-26 22:30+0300\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
diff --git a/po/ca.gmo b/po/ca.gmo
index 04c3eb3..517a43b 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 1f1c09e..0058ff7 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2012-01-01 14:19+0100\n"
 "Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
diff --git a/po/cs.gmo b/po/cs.gmo
index de42511..931614d 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index df3f8ec..666bf3a 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.1.4\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2013-09-18 10:05+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 f10ec66..e2ca4c7 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index e8ae233..45b8f23 100644
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad-1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-08-29 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 c302244..817691b 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 5d7edea..d8887ea 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-08-31 19:37+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 a4c4c34..beb34b0 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index e2ec8db..42403bc 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\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 4af6014..edff2d1 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 654164a..e01e275 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2004-04-26 10:41-0400\n"
 "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
 "Language-Team: English (British) <en_gb@li.org>\n"
diff --git a/po/eo.gmo b/po/eo.gmo
index ff07254..d134187 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index b75bb4f..d9200f8 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2011-06-04 22:18+0200\n"
 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
diff --git a/po/es.gmo b/po/es.gmo
index b03fa82..e49a4ce 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 3142104..3f3a9de 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2011-10-02 15:47+0200\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
diff --git a/po/eu.gmo b/po/eu.gmo
index eefe9e4..9d20682 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index cdeb1d3..0c5f900 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2010-03-25 12:30+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
diff --git a/po/fi.gmo b/po/fi.gmo
index 7120582..2e6c8af 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 1f355a8..6e7fb4a 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2009-08-12 22:13+0300\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
diff --git a/po/fr.gmo b/po/fr.gmo
index 03fad60..1dfa01f 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 57e06fa..5328638 100644
--- a/po/fr.po
+++ b/po/fr.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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2011-04-28 09:13+0200\n"
 "Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
 "Language-Team: French <traduc@traduc.org>\n"
diff --git a/po/gl.gmo b/po/gl.gmo
index 347ec2a..cb03802 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 2ceb839..f8e2056 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2011-09-05 12:50+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
diff --git a/po/gst-plugins-bad-1.0.pot b/po/gst-plugins-bad-1.0.pot
index f4df703..f6dd115 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.4.3\n"
+"Project-Id-Version: gst-plugins-bad 1.4.4\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,13 +16,13 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ext/dash/gstdashdemux.c:1511 ext/smoothstreaming/gstmssdemux.c:1532
-#: gst/mpegtsdemux/mpegtsbase.c:1366 gst/mpegtsdemux/mpegtsbase.c:1370
+#: ext/dash/gstdashdemux.c:1513 ext/smoothstreaming/gstmssdemux.c:1532
+#: gst/mpegtsdemux/mpegtsbase.c:1353 gst/mpegtsdemux/mpegtsbase.c:1357
 #: gst/nuvdemux/gstnuvdemux.c:737
 msgid "Internal data stream error."
 msgstr ""
 
-#: ext/gl/gstgltestsrc.c:544
+#: ext/gl/gstgltestsrc.c:550
 msgid "format wasn't negotiated before get function"
 msgstr ""
 
diff --git a/po/hr.gmo b/po/hr.gmo
index 5208e20..f1f9809 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index a32b373..e9bdad9 100644
--- a/po/hr.po
+++ b/po/hr.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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2012-04-16 02:06+0200\n"
 "Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
diff --git a/po/hu.gmo b/po/hu.gmo
index f4c7e1b..4039286 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 9d16fd3..513e0fe 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-08-31 11:18+0200\n"
 "Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
diff --git a/po/id.gmo b/po/id.gmo
index f176d0c..497838e 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 4aeb9c9..2a9786c 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.3.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-05-31 22:16+0700\n"
 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
diff --git a/po/it.gmo b/po/it.gmo
index db43319..deb96d7 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 32da109..1adebeb 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2009-08-14 00:12+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
diff --git a/po/ja.gmo b/po/ja.gmo
index a51ed47..3d7a0ce 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 74b2408..5d490cc 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2011-04-26 19:38+0900\n"
 "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
diff --git a/po/ky.gmo b/po/ky.gmo
index bb46988..1dae19e 100644
--- a/po/ky.gmo
+++ b/po/ky.gmo
Binary files differ
diff --git a/po/ky.po b/po/ky.po
index 21bea54..a4cb064 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2007-11-13 17:16+0600\n"
 "Last-Translator: Ilyas Bakirov <just_ilyas@yahoo.com>\n"
 "Language-Team: Kirghiz <i18n-team-ky-kyrgyz@lists.sourceforge.net>\n"
diff --git a/po/lt.gmo b/po/lt.gmo
index 1593e60..a2cb0a3 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 15d53bf..be68323 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2008-05-14 02:13+0300\n"
 "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
diff --git a/po/lv.gmo b/po/lv.gmo
index e0f2ff8..e0b59c6 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index cb10779..0c05667 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\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 c2bfc81..07ecbaa 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index 0be3019..fffcc17 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2008-10-26 20:27+0100\n"
 "Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
 "Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
diff --git a/po/nb.gmo b/po/nb.gmo
index 872043c..4f3080c 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index a7784bf..2cee322 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.4.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-07-22 12:38+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 db37e07..5c75ff8 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 533ba26..ef5f9b3 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.4.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-07-22 10:49+0200\n"
 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
diff --git a/po/or.gmo b/po/or.gmo
index 6ae7f1b..5657e06 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 9e96616..d177e5f 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2004-09-27 13:32+0530\n"
 "Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
 "Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
diff --git a/po/pl.gmo b/po/pl.gmo
index fff6ce0..fa65a83 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 9523354..fd7984d 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-08-29 15:47+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 874ecc4..7c2d1ed 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 aeebddc..f56988e 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2013-12-17 01:09-0200\n"
 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
diff --git a/po/ro.gmo b/po/ro.gmo
index 1e458c9..a79c815 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 3edc44b..d112fed 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2010-08-16 03:11+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
diff --git a/po/ru.gmo b/po/ru.gmo
index 297b977..2e7b9ae 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 3f5c1c6..9f55b52 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-09-06 10:56+0400\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@mx.ru>\n"
diff --git a/po/sk.gmo b/po/sk.gmo
index 83ca5a8..d15454d 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 0b40cf4..5567ba3 100644
--- a/po/sk.po
+++ b/po/sk.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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-01-30 10:44+0100\n"
 "Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
diff --git a/po/sl.gmo b/po/sl.gmo
index 19cf78d..aff9890 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 705ef3c..79261d5 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2011-04-26 15:21+0100\n"
 "Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
diff --git a/po/sq.gmo b/po/sq.gmo
index 66965bc..c2ff96a 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index a633d48..3dc1251 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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2008-08-15 16:07+0200\n"
 "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
 "Language-Team: Albanian <translation-team-sq@lists.sourceforge.net>\n"
diff --git a/po/sr.gmo b/po/sr.gmo
index f8dedbe..d963e15 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 882530d..3f51c44 100644
--- a/po/sr.po
+++ b/po/sr.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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-09-13 10:39+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index 439dc47..e4734b3 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 9923f43..af540ad 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-09-19 02:43+0200\n"
 "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
diff --git a/po/tr.gmo b/po/tr.gmo
index 54c175e..02f9f5a 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index ef1040b..ec3599a 100644
--- a/po/tr.po
+++ b/po/tr.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: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2011-04-26 19:21+0200\n"
 "Last-Translator: Server Acim <serveracim@gmail.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
diff --git a/po/uk.gmo b/po/uk.gmo
index 14ff630..e71ce3a 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index e47f3e9..ae430cd 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-08-29 08:35+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
diff --git a/po/vi.gmo b/po/vi.gmo
index bfde2ee..9356cd4 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 5d441a0..d5bdec8 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad-1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2014-08-29 15:09+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 1fe9bad..06ac43a 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 d21e3e8..c425075 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-bad 0.10.16.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-09-24 11:38+0300\n"
+"POT-Creation-Date: 2014-11-06 12:31+0100\n"
 "PO-Revision-Date: 2009-11-20 18:12中国标准时间\n"
 "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
diff --git a/sys/androidmedia/gstamc.c b/sys/androidmedia/gstamc.c
index c2a5b6c..36e4372 100644
--- a/sys/androidmedia/gstamc.c
+++ b/sys/androidmedia/gstamc.c
@@ -2753,7 +2753,7 @@
       }
 
       frame_size =
-          stride * slice_height + 2 * (((stride + 1) / 2) * (slice_height +
+          stride * slice_height + 2 * ((stride + 1) / 2) * ((slice_height +
               1) / 2);
       break;
     }
diff --git a/sys/applemedia/Makefile.am b/sys/applemedia/Makefile.am
index ecbaf08..01c340c 100644
--- a/sys/applemedia/Makefile.am
+++ b/sys/applemedia/Makefile.am
@@ -5,22 +5,14 @@
 	vtutil.c				\
 	corevideobuffer.c			\
 	coremediabuffer.c			\
-	coremediactx.c				\
-	vtapi.c					\
-	atdec.c 				\
-	dynapi.c
+	atdec.c
 
 libgstapplemedia_la_CPPFLAGS =			\
-	-Dgst_dyn_api_get_type=gst_dyn_api_priv_get_type			\
-	-Dgst_dyn_api_debug=gst_dyn_api_priv_debug				\
-	-D_gst_dyn_api_new=_gst_dyn_api_priv_new				\
 	-Dgst_core_media_buffer_new=gst_core_media_buffer_priv_new		\
 	-Dgst_core_media_buffer_get_type=gst_core_media_buffer_priv_get_type	\
 	-Dgst_core_media_buffer_get_pixel_buffer=gst_core_media_buffer_priv_get_pixel_buffer\
 	-Dgst_core_video_buffer_new=gst_core_video_buffer_priv_new		\
-	-Dgst_core_video_buffer_get_type=gst_core_video_buffer_priv_get_type	\
-	-Dgst_core_media_ctx_new=gst_core_media_ctx_priv_new			\
-	-Dgst_core_media_ctx_get_type=gst_core_media_ctx_priv_get_type
+	-Dgst_core_video_buffer_get_type=gst_core_video_buffer_priv_get_type
 
 libgstapplemedia_la_CFLAGS =			\
 	$(GST_CFLAGS)				\
@@ -57,18 +49,12 @@
 noinst_HEADERS =				\
 	qtkitvideosrc.h				\
 	avfvideosrc.h				\
-	vth264decbin.h				\
-	vth264encbin.h				\
 	vtenc.h					\
 	vtdec.h					\
 	vtutil.h				\
 	corevideobuffer.h			\
 	coremediabuffer.h			\
-	coremediactx.h				\
-	vtapi.h					\
 	atdec.h 				\
-	dynapi.h				\
-	dynapi-internal.h                       \
 	iosassetsrc.h				\
 	avfassetsrc.h
 
@@ -108,5 +94,5 @@
 	vtenc.c 				\
 	vtdec.c
 
-libgstapplemedia_la_LDFLAGS += -Wl,-framework -Wl,VideoToolbox
+libgstapplemedia_la_LDFLAGS += -Wl,-weak_framework -Wl,VideoToolbox
 endif
diff --git a/sys/applemedia/Makefile.in b/sys/applemedia/Makefile.in
index ec0f3f5..24e2fc4 100644
--- a/sys/applemedia/Makefile.in
+++ b/sys/applemedia/Makefile.in
@@ -106,7 +106,7 @@
 @HAVE_VIDEOTOOLBOX_TRUE@	vtenc.c 				\
 @HAVE_VIDEOTOOLBOX_TRUE@	vtdec.c
 
-@HAVE_VIDEOTOOLBOX_TRUE@am__append_9 = -Wl,-framework -Wl,VideoToolbox
+@HAVE_VIDEOTOOLBOX_TRUE@am__append_9 = -Wl,-weak_framework -Wl,VideoToolbox
 subdir = sys/applemedia
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(top_srcdir)/depcomp $(noinst_HEADERS)
@@ -184,9 +184,8 @@
 libgstapplemedia_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am__libgstapplemedia_la_SOURCES_DIST = plugin.m vtutil.c \
-	corevideobuffer.c coremediabuffer.c coremediactx.c vtapi.c \
-	atdec.c dynapi.c iosassetsrc.m qtkitvideosrc.m avfvideosrc.m \
-	avfassetsrc.m vtenc.c vtdec.c
+	corevideobuffer.c coremediabuffer.c atdec.c iosassetsrc.m \
+	qtkitvideosrc.m avfvideosrc.m avfassetsrc.m vtenc.c vtdec.c
 @HAVE_IOS_TRUE@am__objects_1 = libgstapplemedia_la-iosassetsrc.lo
 @HAVE_IOS_FALSE@am__objects_2 = libgstapplemedia_la-qtkitvideosrc.lo
 @HAVE_AVFOUNDATION_TRUE@am__objects_3 =  \
@@ -198,10 +197,8 @@
 	libgstapplemedia_la-vtutil.lo \
 	libgstapplemedia_la-corevideobuffer.lo \
 	libgstapplemedia_la-coremediabuffer.lo \
-	libgstapplemedia_la-coremediactx.lo \
-	libgstapplemedia_la-vtapi.lo libgstapplemedia_la-atdec.lo \
-	libgstapplemedia_la-dynapi.lo $(am__objects_1) \
-	$(am__objects_2) $(am__objects_3) $(am__objects_4)
+	libgstapplemedia_la-atdec.lo $(am__objects_1) $(am__objects_2) \
+	$(am__objects_3) $(am__objects_4)
 libgstapplemedia_la_OBJECTS = $(am_libgstapplemedia_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -790,20 +787,14 @@
 wayland_scanner = @wayland_scanner@
 plugin_LTLIBRARIES = libgstapplemedia.la
 libgstapplemedia_la_SOURCES = plugin.m vtutil.c corevideobuffer.c \
-	coremediabuffer.c coremediactx.c vtapi.c atdec.c dynapi.c \
-	$(am__append_2) $(am__append_4) $(am__append_6) \
-	$(am__append_8)
+	coremediabuffer.c atdec.c $(am__append_2) $(am__append_4) \
+	$(am__append_6) $(am__append_8)
 libgstapplemedia_la_CPPFLAGS = \
-	-Dgst_dyn_api_get_type=gst_dyn_api_priv_get_type			\
-	-Dgst_dyn_api_debug=gst_dyn_api_priv_debug				\
-	-D_gst_dyn_api_new=_gst_dyn_api_priv_new				\
 	-Dgst_core_media_buffer_new=gst_core_media_buffer_priv_new		\
 	-Dgst_core_media_buffer_get_type=gst_core_media_buffer_priv_get_type	\
 	-Dgst_core_media_buffer_get_pixel_buffer=gst_core_media_buffer_priv_get_pixel_buffer\
 	-Dgst_core_video_buffer_new=gst_core_video_buffer_priv_new		\
-	-Dgst_core_video_buffer_get_type=gst_core_video_buffer_priv_get_type	\
-	-Dgst_core_media_ctx_new=gst_core_media_ctx_priv_new			\
-	-Dgst_core_media_ctx_get_type=gst_core_media_ctx_priv_get_type
+	-Dgst_core_video_buffer_get_type=gst_core_video_buffer_priv_get_type
 
 libgstapplemedia_la_CFLAGS = \
 	$(GST_CFLAGS)				\
@@ -828,18 +819,12 @@
 noinst_HEADERS = \
 	qtkitvideosrc.h				\
 	avfvideosrc.h				\
-	vth264decbin.h				\
-	vth264encbin.h				\
 	vtenc.h					\
 	vtdec.h					\
 	vtutil.h				\
 	corevideobuffer.h			\
 	coremediabuffer.h			\
-	coremediactx.h				\
-	vtapi.h					\
 	atdec.h 				\
-	dynapi.h				\
-	dynapi-internal.h                       \
 	iosassetsrc.h				\
 	avfassetsrc.h
 
@@ -926,13 +911,10 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-avfassetsrc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-avfvideosrc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-coremediabuffer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-coremediactx.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-corevideobuffer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-dynapi.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-iosassetsrc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-plugin.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-qtkitvideosrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-vtapi.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-vtdec.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-vtenc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstapplemedia_la-vtutil.Plo@am__quote@
@@ -982,20 +964,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 $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-coremediabuffer.lo `test -f 'coremediabuffer.c' || echo '$(srcdir)/'`coremediabuffer.c
 
-libgstapplemedia_la-coremediactx.lo: coremediactx.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-coremediactx.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-coremediactx.Tpo -c -o libgstapplemedia_la-coremediactx.lo `test -f 'coremediactx.c' || echo '$(srcdir)/'`coremediactx.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-coremediactx.Tpo $(DEPDIR)/libgstapplemedia_la-coremediactx.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='coremediactx.c' object='libgstapplemedia_la-coremediactx.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-coremediactx.lo `test -f 'coremediactx.c' || echo '$(srcdir)/'`coremediactx.c
-
-libgstapplemedia_la-vtapi.lo: vtapi.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-vtapi.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-vtapi.Tpo -c -o libgstapplemedia_la-vtapi.lo `test -f 'vtapi.c' || echo '$(srcdir)/'`vtapi.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-vtapi.Tpo $(DEPDIR)/libgstapplemedia_la-vtapi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vtapi.c' object='libgstapplemedia_la-vtapi.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-vtapi.lo `test -f 'vtapi.c' || echo '$(srcdir)/'`vtapi.c
-
 libgstapplemedia_la-atdec.lo: atdec.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-atdec.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-atdec.Tpo -c -o libgstapplemedia_la-atdec.lo `test -f 'atdec.c' || echo '$(srcdir)/'`atdec.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-atdec.Tpo $(DEPDIR)/libgstapplemedia_la-atdec.Plo
@@ -1003,13 +971,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 $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-atdec.lo `test -f 'atdec.c' || echo '$(srcdir)/'`atdec.c
 
-libgstapplemedia_la-dynapi.lo: dynapi.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-dynapi.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-dynapi.Tpo -c -o libgstapplemedia_la-dynapi.lo `test -f 'dynapi.c' || echo '$(srcdir)/'`dynapi.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-dynapi.Tpo $(DEPDIR)/libgstapplemedia_la-dynapi.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='dynapi.c' object='libgstapplemedia_la-dynapi.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -c -o libgstapplemedia_la-dynapi.lo `test -f 'dynapi.c' || echo '$(srcdir)/'`dynapi.c
-
 libgstapplemedia_la-vtenc.lo: vtenc.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstapplemedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgstapplemedia_la_CPPFLAGS) $(CPPFLAGS) $(libgstapplemedia_la_CFLAGS) $(CFLAGS) -MT libgstapplemedia_la-vtenc.lo -MD -MP -MF $(DEPDIR)/libgstapplemedia_la-vtenc.Tpo -c -o libgstapplemedia_la-vtenc.lo `test -f 'vtenc.c' || echo '$(srcdir)/'`vtenc.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstapplemedia_la-vtenc.Tpo $(DEPDIR)/libgstapplemedia_la-vtenc.Plo
diff --git a/sys/applemedia/atdec.c b/sys/applemedia/atdec.c
index 933f3f8..d581fb8 100644
--- a/sys/applemedia/atdec.c
+++ b/sys/applemedia/atdec.c
@@ -441,7 +441,7 @@
 
     GST_DEBUG_OBJECT (atdec,
         "Got output buffer of size %u at position %" G_GUINT64_FORMAT,
-        output_buffer->mAudioDataByteSize, atdec->output_position);
+        (guint) output_buffer->mAudioDataByteSize, atdec->output_position);
     atdec->output_position +=
         output_buffer->mAudioDataByteSize / audio_info->bpf;
 
@@ -487,7 +487,8 @@
   {
     GST_AUDIO_DECODER_ERROR (atdec, 1, STREAM, DECODE, (NULL),
         ("AudioQueueOfflineRender returned invalid buffer size: %u (bpf %d)",
-            output_buffer->mAudioDataByteSize, audio_info->bpf), flow_ret);
+            (guint) output_buffer->mAudioDataByteSize, audio_info->bpf),
+        flow_ret);
 
     AudioQueueFreeBuffer (atdec->queue, output_buffer);
 
diff --git a/sys/applemedia/coremediabuffer.c b/sys/applemedia/coremediabuffer.c
index 73995f0..548f858 100644
--- a/sys/applemedia/coremediabuffer.c
+++ b/sys/applemedia/coremediabuffer.c
@@ -25,8 +25,7 @@
 gst_core_media_meta_free (GstCoreMediaMeta * meta, GstBuffer * buf)
 {
   if (meta->image_buf != NULL) {
-    CVPixelBufferUnlockBaseAddress (meta->image_buf,
-        kCVPixelBufferLock_ReadOnly);
+    CVPixelBufferUnlockBaseAddress (meta->image_buf, 0);
     CVBufferRelease (meta->image_buf);
   }
   if (meta->block_buf != NULL) {
@@ -93,8 +92,7 @@
   GstVideoMeta *video_meta;
   UInt32 size;
 
-  if (CVPixelBufferLockBaseAddress (pixel_buf,
-          kCVPixelBufferLock_ReadOnly) != kCVReturnSuccess) {
+  if (CVPixelBufferLockBaseAddress (pixel_buf, 0) != kCVReturnSuccess) {
     GST_ERROR ("Could not lock pixel buffer base address");
     return FALSE;
   }
diff --git a/sys/applemedia/coremediactx.c b/sys/applemedia/coremediactx.c
deleted file mode 100644
index ac37425..0000000
--- a/sys/applemedia/coremediactx.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "coremediactx.h"
-
-#include <gst/gst.h>
-
-typedef struct _GstApiProvider GstApiProvider;
-
-typedef gpointer (*GstApiProviderObtainFunc) (GError ** error);
-
-struct _GstApiProvider
-{
-  GstCoreMediaApi api;
-  GstApiProviderObtainFunc obtain;
-  guint offset;
-};
-
-#define API_PROVIDER(AN, a_n) \
-  { GST_API_##AN, (GstApiProviderObtainFunc) gst_##a_n##_api_obtain, \
-    G_STRUCT_OFFSET (GstCoreMediaCtx, a_n) }
-
-static const GstApiProvider api_provider[] = {
-  API_PROVIDER (VIDEO_TOOLBOX, vt),
-};
-
-G_DEFINE_TYPE (GstCoreMediaCtx, gst_core_media_ctx, G_TYPE_OBJECT);
-
-static void
-gst_core_media_ctx_init (GstCoreMediaCtx * self)
-{
-}
-
-static void
-gst_core_media_ctx_dispose (GObject * object)
-{
-  GstCoreMediaCtx *self = GST_CORE_MEDIA_CTX_CAST (object);
-  guint i;
-
-  for (i = 0; i != G_N_ELEMENTS (api_provider); i++) {
-    const GstApiProvider *ap = &api_provider[i];
-    gpointer *api_ptr = (gpointer *) ((guint8 *) self + ap->offset);
-
-    if (*api_ptr != NULL) {
-      g_object_unref (*api_ptr);
-      *api_ptr = NULL;
-    }
-  }
-
-  G_OBJECT_CLASS (gst_core_media_ctx_parent_class)->dispose (object);
-}
-
-static void
-gst_core_media_ctx_class_init (GstCoreMediaCtxClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
-  gobject_class->dispose = gst_core_media_ctx_dispose;
-}
-
-GstCoreMediaCtx *
-gst_core_media_ctx_new (GstCoreMediaApi required_apis, GError ** error)
-{
-  GstCoreMediaCtx *ctx;
-  GArray *error_messages;
-  guint i;
-
-  ctx = g_object_new (GST_TYPE_CORE_MEDIA_CTX, NULL);
-
-  error_messages = g_array_new (TRUE, FALSE, sizeof (gchar *));
-
-  for (i = 0; i != G_N_ELEMENTS (api_provider); i++) {
-    const GstApiProvider *ap = &api_provider[i];
-
-    if ((required_apis & ap->api) != 0) {
-      gpointer *api_ptr = (gpointer *) ((guint8 *) ctx + ap->offset);
-      GError *tmp_error = NULL;
-
-      *api_ptr = ap->obtain (&tmp_error);
-      if (tmp_error != NULL) {
-        gchar *message_copy = g_strdup (tmp_error->message);
-        g_array_append_val (error_messages, message_copy);
-        g_clear_error (&tmp_error);
-      }
-    }
-  }
-
-  if (error_messages->len != 0) {
-    gchar *errors_joined;
-
-    errors_joined = g_strjoinv ("\n\t* ", (gchar **) error_messages->data);
-    g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
-        "Could not obtain required API%s:%s%s",
-        (error_messages->len == 1) ? "" : "s",
-        (error_messages->len == 1) ? " " : "\n\t* ", errors_joined);
-    g_free (errors_joined);
-
-    g_object_unref (ctx);
-    ctx = NULL;
-  }
-
-  for (i = 0; i != error_messages->len; i++)
-    g_free (g_array_index (error_messages, gchar *, i));
-  g_array_free (error_messages, TRUE);
-
-  return ctx;
-}
diff --git a/sys/applemedia/coremediactx.h b/sys/applemedia/coremediactx.h
deleted file mode 100644
index 54421a3..0000000
--- a/sys/applemedia/coremediactx.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CORE_MEDIA_CTX_H__
-#define __GST_CORE_MEDIA_CTX_H__
-
-#include "vtapi.h"
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_CORE_MEDIA_CTX \
-  (gst_core_media_ctx_get_type ())
-#define GST_CORE_MEDIA_CTX(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_CORE_MEDIA_CTX, GstCoreMediaCtx))
-#define GST_CORE_MEDIA_CTX_CAST(obj) \
-  ((GstCoreMediaCtx *) (obj))
-#define GST_CORE_MEDIA_CTX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_CORE_MEDIA_CTX, GstCoreMediaCtxClass))
-#define GST_IS_CORE_MEDIA_CTX(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_CORE_MEDIA_CTX))
-#define GST_IS_CORE_MEDIA_CTX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_CORE_MEDIA_CTX))
-
-typedef struct _GstCoreMediaCtx GstCoreMediaCtx;
-typedef struct _GstCoreMediaCtxClass GstCoreMediaCtxClass;
-
-typedef enum _GstCoreMediaApi GstCoreMediaApi;
-
-struct _GstCoreMediaCtx
-{
-  GObject parent;
-
-  /* Common */
-  GstVTApi *vt;
-};
-
-struct _GstCoreMediaCtxClass
-{
-  GObjectClass parent_class;
-};
-
-enum _GstCoreMediaApi
-{
-  GST_API_VIDEO_TOOLBOX = (1 << 0),
-};
-
-GType gst_core_media_ctx_get_type (void);
-
-GstCoreMediaCtx * gst_core_media_ctx_new (GstCoreMediaApi required_apis,
-    GError ** error);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/applemedia/corevideobuffer.c b/sys/applemedia/corevideobuffer.c
index 0e08398..b1da334 100644
--- a/sys/applemedia/corevideobuffer.c
+++ b/sys/applemedia/corevideobuffer.c
@@ -23,7 +23,7 @@
 gst_core_video_meta_free (GstCoreVideoMeta * meta, GstBuffer * buf)
 {
   if (meta->pixbuf != NULL) {
-    CVPixelBufferUnlockBaseAddress (meta->pixbuf, kCVPixelBufferLock_ReadOnly);
+    CVPixelBufferUnlockBaseAddress (meta->pixbuf, 0);
   }
 
   CVBufferRelease (meta->cvbuf);
@@ -74,8 +74,7 @@
 
   pixbuf = (CVPixelBufferRef) cvbuf;
 
-  if (CVPixelBufferLockBaseAddress (pixbuf,
-          kCVPixelBufferLock_ReadOnly) != kCVReturnSuccess) {
+  if (CVPixelBufferLockBaseAddress (pixbuf, 0) != kCVReturnSuccess) {
     goto error;
   }
 
diff --git a/sys/applemedia/dynapi-internal.h b/sys/applemedia/dynapi-internal.h
deleted file mode 100644
index adcd4f1..0000000
--- a/sys/applemedia/dynapi-internal.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DYN_API_INTERNAL_H__
-#define __GST_DYN_API_INTERNAL_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GstDynSymSpec       GstDynSymSpec;
-
-struct _GstDynSymSpec
-{
-  const gchar * name;
-  guint offset;
-  gboolean is_required;
-};
-
-gpointer _gst_dyn_api_new (GType derived_type, const gchar * filename,
-    const GstDynSymSpec * symbols, GError ** error);
-
-G_END_DECLS
-
-#endif
-
diff --git a/sys/applemedia/dynapi.c b/sys/applemedia/dynapi.c
deleted file mode 100644
index 2317f80..0000000
--- a/sys/applemedia/dynapi.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "dynapi.h"
-
-#include "dynapi-internal.h"
-
-#include <gmodule.h>
-#include <gst/gst.h>
-
-GST_DEBUG_CATEGORY (gst_dyn_api_debug);
-#define GST_CAT_DEFAULT gst_dyn_api_debug
-
-enum
-{
-  PROP_0,
-  PROP_FILENAME
-};
-
-struct _GstDynApiPrivate
-{
-  gchar *filename;
-  GModule *module;
-};
-
-G_DEFINE_TYPE (GstDynApi, gst_dyn_api, G_TYPE_OBJECT);
-
-static void
-gst_dyn_api_init (GstDynApi * self)
-{
-  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GST_TYPE_DYN_API,
-      GstDynApiPrivate);
-}
-
-static void
-gst_dyn_api_dispose (GObject * object)
-{
-  GstDynApi *self = GST_DYN_API_CAST (object);
-  GstDynApiPrivate *priv = self->priv;
-
-  if (priv->module != NULL) {
-    g_module_close (priv->module);
-    priv->module = NULL;
-  }
-
-  G_OBJECT_CLASS (gst_dyn_api_parent_class)->dispose (object);
-}
-
-static void
-gst_dyn_api_finalize (GObject * object)
-{
-  GstDynApi *self = GST_DYN_API_CAST (object);
-  GstDynApiPrivate *priv = self->priv;
-
-  g_free (priv->filename);
-
-  G_OBJECT_CLASS (gst_dyn_api_parent_class)->finalize (object);
-}
-
-static void
-gst_dyn_api_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstDynApi *self = GST_DYN_API (object);
-
-  switch (prop_id) {
-    case PROP_FILENAME:
-      g_value_set_string (value, self->priv->filename);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_dyn_api_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstDynApi *self = GST_DYN_API (object);
-
-  switch (prop_id) {
-    case PROP_FILENAME:
-      g_free (self->priv->filename);
-      self->priv->filename = g_value_dup_string (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_dyn_api_class_init (GstDynApiClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
-  gobject_class->dispose = gst_dyn_api_dispose;
-  gobject_class->finalize = gst_dyn_api_finalize;
-  gobject_class->get_property = gst_dyn_api_get_property;
-  gobject_class->set_property = gst_dyn_api_set_property;
-
-  g_type_class_add_private (klass, sizeof (GstDynApiPrivate));
-
-  g_object_class_install_property (gobject_class, PROP_FILENAME,
-      g_param_spec_string ("filename", "Filename", "Filename", NULL,
-          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-}
-
-gpointer
-_gst_dyn_api_new (GType derived_type, const gchar * filename,
-    const GstDynSymSpec * symbols, GError ** error)
-{
-  GstDynApi *api;
-  GstDynApiPrivate *priv;
-  guint i;
-  GArray *names_not_found;
-
-  api = g_object_new (derived_type, "filename", filename, NULL);
-  priv = api->priv;
-
-  priv->module = g_module_open (priv->filename, 0);
-  if (priv->module == NULL)
-    goto open_failed;
-
-  names_not_found = g_array_new (TRUE, FALSE, sizeof (gchar *));
-
-  for (i = 0; symbols[i].name != NULL; i++) {
-    const GstDynSymSpec *s = &symbols[i];
-    if (!g_module_symbol (priv->module, s->name,
-            (gpointer *) (((guint8 *) api) + s->offset)) && s->is_required) {
-      g_array_append_val (names_not_found, s->name);
-    }
-  }
-
-  if (names_not_found->len > 0)
-    goto one_or_more_name_not_found;
-
-  g_array_free (names_not_found, TRUE);
-
-  return api;
-
-  /* ERRORS */
-open_failed:
-  {
-    gchar *basename;
-
-    basename = g_path_get_basename (filename);
-    g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
-        "failed to open %s", basename);
-    g_free (basename);
-
-    goto any_error;
-  }
-one_or_more_name_not_found:
-  {
-    gchar *basename, *names_joined;
-
-    basename = g_path_get_basename (filename);
-    names_joined = g_strjoinv (", ", (gchar **) names_not_found->data);
-    g_set_error (error, GST_RESOURCE_ERROR, GST_RESOURCE_ERROR_FAILED,
-        "missing %u symbol%s in %s: %s",
-        names_not_found->len, (names_not_found->len == 1) ? "" : "s",
-        basename, names_joined);
-    g_free (names_joined);
-    g_free (basename);
-    g_array_free (names_not_found, TRUE);
-
-    goto any_error;
-  }
-any_error:
-  {
-    g_object_unref (api);
-
-    return NULL;
-  }
-}
diff --git a/sys/applemedia/dynapi.h b/sys/applemedia/dynapi.h
deleted file mode 100644
index b8eda85..0000000
--- a/sys/applemedia/dynapi.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DYN_API_H__
-#define __GST_DYN_API_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DYN_API \
-  (gst_dyn_api_get_type ())
-#define GST_DYN_API(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_DYN_API, GstDynApi))
-#define GST_DYN_API_CAST(obj) \
-  ((GstDynApi *) (obj))
-#define GST_DYN_API_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DYN_API, GstDynApiClass))
-#define GST_IS_DYN_API(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DYN_API))
-#define GST_IS_DYN_API_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_DYN_API))
-
-#define GST_DYN_SYM_SPEC(type, name) \
-  { G_STRINGIFY (name), G_STRUCT_OFFSET (type, name), TRUE }
-#define GST_DYN_SYM_SPEC_OPTIONAL(type, name) \
-  { G_STRINGIFY (name), G_STRUCT_OFFSET (type, name), FALSE }
-
-typedef struct _GstDynApi GstDynApi;
-typedef struct _GstDynApiClass GstDynApiClass;
-typedef struct _GstDynApiPrivate GstDynApiPrivate;
-
-struct _GstDynApi
-{
-  GObject parent;
-
-  GstDynApiPrivate * priv;
-};
-
-struct _GstDynApiClass
-{
-  GObjectClass parent_class;
-};
-
-GType gst_dyn_api_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/applemedia/plugin.m b/sys/applemedia/plugin.m
index e85f67a..44ff3e4 100644
--- a/sys/applemedia/plugin.m
+++ b/sys/applemedia/plugin.m
@@ -36,8 +36,6 @@
 #endif
 #ifndef HAVE_IOS
 #define AV_RANK GST_RANK_SECONDARY
-#include "vth264decbin.h"
-#include "vth264encbin.h"
 #else
 #define AV_RANK GST_RANK_PRIMARY
 #endif
@@ -81,17 +79,14 @@
       GST_TYPE_AVF_ASSET_SRC);
 #endif
 
-#if 0
-  res &= gst_element_register (plugin, "vth264decbin", GST_RANK_NONE,
-      GST_TYPE_VT_H264_DEC_BIN);
-  res &= gst_element_register (plugin, "vth264encbin", GST_RANK_NONE,
-      GST_TYPE_VT_H264_ENC_BIN);
-#endif
   res &= gst_element_register (plugin, "atdec", GST_RANK_MARGINAL, GST_TYPE_ATDEC);
 
 #ifdef HAVE_VIDEOTOOLBOX
-  res &= gst_element_register (plugin, "vtdec", GST_RANK_PRIMARY, GST_TYPE_VTDEC);
-  gst_vtenc_register_elements (plugin);
+  /* Check if the framework actually exists at runtime */
+  if (VTCompressionSessionCreate != NULL) {
+    res &= gst_element_register (plugin, "vtdec", GST_RANK_PRIMARY, GST_TYPE_VTDEC);
+    gst_vtenc_register_elements (plugin);
+  }
 #endif
 
   return res;
diff --git a/sys/applemedia/vtapi.c b/sys/applemedia/vtapi.c
deleted file mode 100644
index 2def2c5..0000000
--- a/sys/applemedia/vtapi.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2010, 2013 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "vtapi.h"
-
-#include "dynapi-internal.h"
-
-#include <gmodule.h>
-
-#define VT_FRAMEWORK_PATH "/System/Library/Frameworks/" \
-    "VideoToolbox.framework/VideoToolbox"
-#define VT_FRAMEWORK_PATH_OLD "/System/Library/PrivateFrameworks/" \
-    "VideoToolbox.framework/VideoToolbox"
-
-G_DEFINE_TYPE (GstVTApi, gst_vt_api, GST_TYPE_DYN_API);
-
-static void
-gst_vt_api_init (GstVTApi * self)
-{
-}
-
-static void
-gst_vt_api_class_init (GstVTApiClass * klass)
-{
-}
-
-#define SYM_SPEC(name) GST_DYN_SYM_SPEC (GstVTApi, name)
-
-GstVTApi *
-gst_vt_api_obtain (GError ** error)
-{
-  static const GstDynSymSpec symbols[] = {
-    SYM_SPEC (VTCompressionSessionCompleteFrames),
-    SYM_SPEC (VTCompressionSessionCopyProperty),
-    SYM_SPEC (VTCompressionSessionCopySupportedPropertyDictionary),
-    SYM_SPEC (VTCompressionSessionCreate),
-    SYM_SPEC (VTCompressionSessionEncodeFrame),
-    SYM_SPEC (VTCompressionSessionInvalidate),
-    SYM_SPEC (VTCompressionSessionSetProperty),
-
-    SYM_SPEC (VTDecompressionSessionCreate),
-    SYM_SPEC (VTDecompressionSessionDecodeFrame),
-    SYM_SPEC (VTDecompressionSessionInvalidate),
-    SYM_SPEC (VTDecompressionSessionWaitForAsynchronousFrames),
-    SYM_SPEC (VTDecompressionSessionFinishDelayedFrames),
-
-    SYM_SPEC (kVTCompressionPropertyKey_AllowTemporalCompression),
-    SYM_SPEC (kVTCompressionPropertyKey_AverageDataRate),
-    SYM_SPEC (kVTCompressionPropertyKey_ExpectedFrameRate),
-    SYM_SPEC (kVTCompressionPropertyKey_ExpectedDuration),
-    SYM_SPEC (kVTCompressionPropertyKey_MaxKeyFrameInterval),
-    SYM_SPEC (kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration),
-    SYM_SPEC (kVTCompressionPropertyKey_ProfileLevel),
-    SYM_SPEC (kVTCompressionPropertyKey_Usage),
-
-    SYM_SPEC (kVTEncodeFrameOptionKey_ForceKeyFrame),
-
-    SYM_SPEC (kVTProfileLevel_H264_Baseline_1_3),
-    SYM_SPEC (kVTProfileLevel_H264_Baseline_3_0),
-    SYM_SPEC (kVTProfileLevel_H264_Extended_5_0),
-    SYM_SPEC (kVTProfileLevel_H264_High_5_0),
-    SYM_SPEC (kVTProfileLevel_H264_Main_3_0),
-    SYM_SPEC (kVTProfileLevel_H264_Main_3_1),
-    SYM_SPEC (kVTProfileLevel_H264_Main_4_0),
-    SYM_SPEC (kVTProfileLevel_H264_Main_4_1),
-    SYM_SPEC (kVTProfileLevel_H264_Main_5_0),
-
-    {NULL, 0},
-  };
-  GstVTApi *result;
-  GModule *module;
-
-  module = g_module_open (VT_FRAMEWORK_PATH, 0);
-  if (module != NULL) {
-    result = _gst_dyn_api_new (gst_vt_api_get_type (), VT_FRAMEWORK_PATH,
-        symbols, error);
-    g_module_close (module);
-  } else {
-    result = _gst_dyn_api_new (gst_vt_api_get_type (), VT_FRAMEWORK_PATH_OLD,
-        symbols, error);
-  }
-
-  return result;
-}
diff --git a/sys/applemedia/vtapi.h b/sys/applemedia/vtapi.h
deleted file mode 100644
index 9943717..0000000
--- a/sys/applemedia/vtapi.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_VT_API_H__
-#define __GST_VT_API_H__
-
-#include "dynapi.h"
-#include "CoreMedia/CoreMedia.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GstVTApi GstVTApi;
-typedef struct _GstVTApiClass GstVTApiClass;
-
-typedef enum _VTStatus VTStatus;
-typedef enum _VTDecodeFrameFlags VTDecodeFrameFlags;
-typedef enum _VTDecodeInfoFlags VTDecodeInfoFlags;
-
-typedef guint32 VTFormatId;
-
-typedef CFTypeRef VTCompressionSessionRef;
-typedef CFTypeRef VTDecompressionSessionRef;
-typedef struct _VTCompressionOutputCallback VTCompressionOutputCallback;
-typedef struct _VTDecompressionOutputCallback VTDecompressionOutputCallback;
-
-typedef VTStatus (* VTCompressionOutputCallbackFunc) (void * data, int a2,
-    int a3, int a4, CMSampleBufferRef sbuf, int a6, int a7);
-typedef void (* VTDecompressionOutputCallbackFunc) (void *data1, void *data2,
-    VTStatus result, VTDecodeInfoFlags info, CVBufferRef cvbuf,
-    CMTime pts, CMTime dts);
-
-enum _VTStatus
-{
-  kVTSuccess = 0
-};
-
-enum _VTFormat
-{
-  kVTFormatH264 = 'avc1',
-  kVTFormatMPEG2 = 'mp2v',
-  kVTFormatJPEG = 'jpeg'
-};
-
-enum _VTDecodeFrameFlags
-{
-  kVTDecodeFrame_EnableAsynchronousDecompression = 1<<0,
-  kVTDecodeFrame_DoNotOutputFrame = 1<<1,
-  /* low-power mode that can not decode faster than 1x realtime. */
-  kVTDecodeFrame_1xRealTimePlayback = 1<<2,
-  /* Output frame in PTS order.
-   * Needs to call VTDecompressionSessionFinishDelayedFrames to dequeue */
-  kVTDecodeFrame_EnableTemporalProcessing = 1<<3,
-};
-
-enum _VTDecodeInfoFlags
-{
-  kVTDecodeInfo_Asynchronous = 1UL << 0,
-  kVTDecodeInfo_FrameDropped = 1UL << 1,
-};
-
-struct _VTCompressionOutputCallback
-{
-  VTCompressionOutputCallbackFunc func;
-  void * data;
-};
-
-struct _VTDecompressionOutputCallback
-{
-  VTDecompressionOutputCallbackFunc func;
-  void * data;
-};
-
-struct _GstVTApi
-{
-  GstDynApi parent;
-
-  VTStatus (* VTCompressionSessionCompleteFrames)
-      (VTCompressionSessionRef session, CMTime completeUntilDisplayTimestamp);
-  VTStatus (* VTCompressionSessionCopyProperty)
-      (VTCompressionSessionRef session, CFTypeRef key, void* unk,
-      CFTypeRef * value);
-  VTStatus (* VTCompressionSessionCopySupportedPropertyDictionary)
-      (VTCompressionSessionRef session, CFDictionaryRef * dict);
-  VTStatus (* VTCompressionSessionCreate)
-      (CFAllocatorRef allocator, gint width, gint height, VTFormatId formatId,
-      gsize unk1, CFDictionaryRef sourcePixelBufferAttributes, gsize unk2,
-      VTCompressionOutputCallback outputCallback,
-      VTCompressionSessionRef * session);
-  VTStatus (* VTCompressionSessionEncodeFrame)
-      (VTCompressionSessionRef session, CVPixelBufferRef pixelBuffer,
-      CMTime displayTimestamp, CMTime displayDuration,
-      CFDictionaryRef frameOptions, void * sourceTrackingCallback,
-      void * sourceFrameRefCon);
-  void (* VTCompressionSessionInvalidate)
-      (VTCompressionSessionRef session);
-  VTStatus (* VTCompressionSessionSetProperty)
-      (VTCompressionSessionRef session, CFStringRef propName,
-      CFTypeRef propValue);
-
-  VTStatus (* VTDecompressionSessionCreate)
-      (CFAllocatorRef allocator,
-      CMFormatDescriptionRef videoFormatDescription,
-      CFTypeRef sessionOptions,
-      CFDictionaryRef destinationPixelBufferAttributes,
-      VTDecompressionOutputCallback * outputCallback,
-      VTDecompressionSessionRef * session);
-  VTStatus (* VTDecompressionSessionDecodeFrame)
-      (VTDecompressionSessionRef session, CMSampleBufferRef sbuf,
-       VTDecodeFrameFlags decode_flags, void *src_buf,
-       VTDecodeInfoFlags *info_flags);
-  void (* VTDecompressionSessionInvalidate)
-      (VTDecompressionSessionRef session);
-  VTStatus (* VTDecompressionSessionWaitForAsynchronousFrames)
-      (VTDecompressionSessionRef session);
-  VTStatus (* VTDecompressionSessionFinishDelayedFrames)
-      (VTDecompressionSessionRef session);
-
-  CFStringRef * kVTCompressionPropertyKey_AllowTemporalCompression;
-  CFStringRef * kVTCompressionPropertyKey_AverageDataRate;
-  CFStringRef * kVTCompressionPropertyKey_ExpectedFrameRate;
-  CFStringRef * kVTCompressionPropertyKey_ExpectedDuration;
-  CFStringRef * kVTCompressionPropertyKey_MaxKeyFrameInterval;
-  CFStringRef * kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration;
-  CFStringRef * kVTCompressionPropertyKey_ProfileLevel;
-  CFStringRef * kVTCompressionPropertyKey_Usage;
-  CFStringRef * kVTEncodeFrameOptionKey_ForceKeyFrame;
-  CFStringRef * kVTProfileLevel_H264_Baseline_1_3;
-  CFStringRef * kVTProfileLevel_H264_Baseline_3_0;
-  CFStringRef * kVTProfileLevel_H264_Extended_5_0;
-  CFStringRef * kVTProfileLevel_H264_High_5_0;
-  CFStringRef * kVTProfileLevel_H264_Main_3_0;
-  CFStringRef * kVTProfileLevel_H264_Main_3_1;
-  CFStringRef * kVTProfileLevel_H264_Main_4_0;
-  CFStringRef * kVTProfileLevel_H264_Main_4_1;
-  CFStringRef * kVTProfileLevel_H264_Main_5_0;
-};
-
-struct _GstVTApiClass
-{
-  GstDynApiClass parent_class;
-};
-
-GType gst_vt_api_get_type (void);
-
-GstVTApi * gst_vt_api_obtain (GError ** error);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/applemedia/vtdec.c b/sys/applemedia/vtdec.c
index 2c92b0f..4aa26cf 100644
--- a/sys/applemedia/vtdec.c
+++ b/sys/applemedia/vtdec.c
@@ -306,7 +306,7 @@
 
 error:
   GST_ELEMENT_ERROR (vtdec, STREAM, DECODE, (NULL),
-      ("VTDecompressionSessionDecodeFrame returned %d", status));
+      ("VTDecompressionSessionDecodeFrame returned %d", (int) status));
   ret = GST_FLOW_ERROR;
   goto out;
 }
@@ -350,7 +350,7 @@
 
   if (status != noErr) {
     GST_ELEMENT_ERROR (vtdec, RESOURCE, FAILED, (NULL),
-        ("VTDecompressionSessionCreate returned %d", status));
+        ("VTDecompressionSessionCreate returned %d", (int) status));
     return FALSE;
   }
 
@@ -455,9 +455,23 @@
     goto block_error;
 
   /* create a sample buffer, the CoreMedia equivalent of GstBuffer */
-  sample_timing.duration = CMTimeMake (GST_BUFFER_DURATION (buf), 1);
-  sample_timing.presentationTimeStamp = CMTimeMake (GST_BUFFER_PTS (buf), 1);
-  sample_timing.decodeTimeStamp = CMTimeMake (GST_BUFFER_DTS (buf), 1);
+  if (GST_BUFFER_DURATION_IS_VALID (buf))
+    sample_timing.duration = CMTimeMake (GST_BUFFER_DURATION (buf), GST_SECOND);
+  else
+    sample_timing.duration = kCMTimeInvalid;
+
+  if (GST_BUFFER_PTS_IS_VALID (buf))
+    sample_timing.presentationTimeStamp =
+        CMTimeMake (GST_BUFFER_PTS (buf), GST_SECOND);
+  else
+    sample_timing.presentationTimeStamp = kCMTimeInvalid;
+
+  if (GST_BUFFER_DTS_IS_VALID (buf))
+    sample_timing.decodeTimeStamp =
+        CMTimeMake (GST_BUFFER_DTS (buf), GST_SECOND);
+  else
+    sample_timing.decodeTimeStamp = kCMTimeInvalid;
+
   time_array[0] = sample_timing;
 
   status =
@@ -471,12 +485,12 @@
 
 block_error:
   GST_ELEMENT_ERROR (vtdec, RESOURCE, FAILED, (NULL),
-      ("CMBlockBufferCreateWithMemoryBlock returned %d", status));
+      ("CMBlockBufferCreateWithMemoryBlock returned %d", (int) status));
   goto out;
 
 sample_error:
   GST_ELEMENT_ERROR (vtdec, RESOURCE, FAILED, (NULL),
-      ("CMSampleBufferCreate returned %d", status));
+      ("CMSampleBufferCreate returned %d", (int) status));
 
   if (bbuf)
     CFRelease (bbuf);
@@ -520,7 +534,7 @@
       frame->decode_frame_number, image_buffer);
 
   if (status != noErr) {
-    GST_ERROR_OBJECT (vtdec, "Error decoding frame %d", status);
+    GST_ERROR_OBJECT (vtdec, "Error decoding frame %d", (int) status);
     goto drop;
   }
 
@@ -715,6 +729,8 @@
   int width_in_mb_s = vtdec->video_info.width / dpb_mb_size;
   int height_in_mb_s = vtdec->video_info.height / dpb_mb_size;
 
+  *length = 0;
+
   if (!parse_h264_profile_and_level_from_codec_data (vtdec, codec_data,
           &profile, &level))
     return FALSE;
@@ -736,9 +752,17 @@
 static void
 gst_vtdec_set_latency (GstVtdec * vtdec)
 {
-  GstClockTime frame_duration = gst_util_uint64_scale (GST_SECOND,
+  GstClockTime frame_duration;
+  GstClockTime latency;
+
+  if (vtdec->video_info.fps_n == 0) {
+    GST_INFO_OBJECT (vtdec, "Framerate not known, can't set latency");
+    return;
+  }
+
+  frame_duration = gst_util_uint64_scale (GST_SECOND,
       vtdec->video_info.fps_d, vtdec->video_info.fps_n);
-  GstClockTime latency = frame_duration * vtdec->reorder_queue_length;
+  latency = frame_duration * vtdec->reorder_queue_length;
 
   GST_INFO_OBJECT (vtdec, "setting latency frames:%d time:%" GST_TIME_FORMAT,
       vtdec->reorder_queue_length, GST_TIME_ARGS (latency));
diff --git a/sys/applemedia/vtenc.c b/sys/applemedia/vtenc.c
index 59e57bb..e9b841f 100644
--- a/sys/applemedia/vtenc.c
+++ b/sys/applemedia/vtenc.c
@@ -17,17 +17,19 @@
  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  * Boston, MA 02110-1301, USA.
  */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
 
 #include "vtenc.h"
 
 #include "coremediabuffer.h"
+#include "corevideobuffer.h"
 #include "vtutil.h"
 
 #define VTENC_DEFAULT_USAGE       6     /* Profile: Baseline  Level: 2.1 */
 #define VTENC_DEFAULT_BITRATE     768
 
-#define VTENC_MIN_RESET_INTERVAL  (GST_SECOND / 2)
-
 GST_DEBUG_CATEGORY (gst_vtenc_debug);
 #define GST_CAT_DEFAULT (gst_vtenc_debug)
 
@@ -56,45 +58,43 @@
 static void gst_vtenc_set_property (GObject * obj, guint prop_id,
     const GValue * value, GParamSpec * pspec);
 
-static GstStateChangeReturn gst_vtenc_change_state (GstElement * element,
-    GstStateChange transition);
-static gboolean gst_vtenc_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-static gboolean gst_vtenc_sink_setcaps (GstVTEnc * self, GstCaps * caps);
+static gboolean gst_vtenc_start (GstVideoEncoder * enc);
+static gboolean gst_vtenc_stop (GstVideoEncoder * enc);
+static gboolean gst_vtenc_set_format (GstVideoEncoder * enc,
+    GstVideoCodecState * input_state);
+static GstFlowReturn gst_vtenc_handle_frame (GstVideoEncoder * enc,
+    GstVideoCodecFrame * frame);
+static GstFlowReturn gst_vtenc_finish (GstVideoEncoder * enc);
+
 static void gst_vtenc_clear_cached_caps_downstream (GstVTEnc * self);
-static GstFlowReturn gst_vtenc_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buf);
-static gboolean gst_vtenc_src_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
 
 static VTCompressionSessionRef gst_vtenc_create_session (GstVTEnc * self);
 static void gst_vtenc_destroy_session (GstVTEnc * self,
     VTCompressionSessionRef * session);
 static void gst_vtenc_session_dump_properties (GstVTEnc * self,
     VTCompressionSessionRef session);
-static void gst_vtenc_session_configure_usage (GstVTEnc * self,
-    VTCompressionSessionRef session, gint usage);
 static void gst_vtenc_session_configure_expected_framerate (GstVTEnc * self,
     VTCompressionSessionRef session, gdouble framerate);
-static void gst_vtenc_session_configure_expected_duration (GstVTEnc * self,
-    VTCompressionSessionRef session, gdouble duration);
 static void gst_vtenc_session_configure_max_keyframe_interval (GstVTEnc * self,
     VTCompressionSessionRef session, gint interval);
 static void gst_vtenc_session_configure_max_keyframe_interval_duration
     (GstVTEnc * self, VTCompressionSessionRef session, gdouble duration);
 static void gst_vtenc_session_configure_bitrate (GstVTEnc * self,
     VTCompressionSessionRef session, guint bitrate);
-static VTStatus gst_vtenc_session_configure_property_int (GstVTEnc * self,
+static OSStatus gst_vtenc_session_configure_property_int (GstVTEnc * self,
     VTCompressionSessionRef session, CFStringRef name, gint value);
-static VTStatus gst_vtenc_session_configure_property_double (GstVTEnc * self,
+static OSStatus gst_vtenc_session_configure_property_double (GstVTEnc * self,
     VTCompressionSessionRef session, CFStringRef name, gdouble value);
 
-static GstFlowReturn gst_vtenc_encode_frame (GstVTEnc * self, GstBuffer * buf);
-static VTStatus gst_vtenc_enqueue_buffer (void *data, int a2, int a3, int a4,
-    CMSampleBufferRef sbuf, int a6, int a7);
+static GstFlowReturn gst_vtenc_encode_frame (GstVTEnc * self,
+    GstVideoCodecFrame * frame);
+static void gst_vtenc_enqueue_buffer (void *outputCallbackRefCon,
+    void *sourceFrameRefCon, OSStatus status, VTEncodeInfoFlags infoFlags,
+    CMSampleBufferRef sampleBuffer);
 static gboolean gst_vtenc_buffer_is_keyframe (GstVTEnc * self,
     CMSampleBufferRef sbuf);
 
+#ifndef HAVE_IOS
 static GstVTEncFrame *gst_vtenc_frame_new (GstBuffer * buf,
     GstVideoInfo * videoinfo);
 static void gst_vtenc_frame_free (GstVTEncFrame * frame);
@@ -102,6 +102,7 @@
 static void gst_pixel_buffer_release_cb (void *releaseRefCon,
     const void *dataPtr, size_t dataSize, size_t numberOfPlanes,
     const void *planeAddresses[]);
+#endif
 
 static GstStaticCaps sink_caps =
 GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ NV12, I420 }"));
@@ -139,7 +140,7 @@
       "height", GST_TYPE_INT_RANGE, min_height, max_height,
       "framerate", GST_TYPE_FRACTION_RANGE,
       min_fps_n, min_fps_d, max_fps_n, max_fps_d, NULL);
-  if (codec_details->format_id == kVTFormatH264) {
+  if (codec_details->format_id == kCMVideoCodecType_H264) {
     gst_structure_set (gst_caps_get_structure (src_caps, 0),
         "stream-format", G_TYPE_STRING, "avc", NULL);
   }
@@ -152,23 +153,22 @@
 gst_vtenc_class_init (GstVTEncClass * klass)
 {
   GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
+  GstVideoEncoderClass *gstvideoencoder_class;
 
   gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
+  gstvideoencoder_class = (GstVideoEncoderClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
   gobject_class->get_property = gst_vtenc_get_property;
   gobject_class->set_property = gst_vtenc_set_property;
 
-  gstelement_class->change_state = gst_vtenc_change_state;
+  gstvideoencoder_class->start = gst_vtenc_start;
+  gstvideoencoder_class->stop = gst_vtenc_stop;
+  gstvideoencoder_class->set_format = gst_vtenc_set_format;
+  gstvideoencoder_class->handle_frame = gst_vtenc_handle_frame;
+  gstvideoencoder_class->finish = gst_vtenc_finish;
 
-  g_object_class_install_property (gobject_class, PROP_USAGE,
-      g_param_spec_int ("usage", "Usage",
-          "Usage enumeration value",
-          G_MININT, G_MAXINT, VTENC_DEFAULT_USAGE,
-          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_BITRATE,
       g_param_spec_uint ("bitrate", "Bitrate",
           "Target video bitrate in kbps",
@@ -180,22 +180,9 @@
 gst_vtenc_init (GstVTEnc * self)
 {
   GstVTEncClass *klass = (GstVTEncClass *) G_OBJECT_GET_CLASS (self);
-  GstElementClass *element_klass = GST_ELEMENT_CLASS (klass);
-  GstElement *element = GST_ELEMENT (self);
 
   self->details = GST_VTENC_CLASS_GET_CODEC_DETAILS (klass);
 
-  self->sinkpad = gst_pad_new_from_template
-      (gst_element_class_get_pad_template (element_klass, "sink"), "sink");
-  gst_element_add_pad (element, self->sinkpad);
-  gst_pad_set_event_function (self->sinkpad, gst_vtenc_sink_event);
-  gst_pad_set_chain_function (self->sinkpad, gst_vtenc_chain);
-
-  self->srcpad = gst_pad_new_from_template
-      (gst_element_class_get_pad_template (element_klass, "src"), "src");
-  gst_pad_set_event_function (self->srcpad, gst_vtenc_src_event);
-  gst_element_add_pad (element, self->srcpad);
-
   /* These could be controlled by properties later */
   self->dump_properties = FALSE;
   self->dump_attributes = FALSE;
@@ -203,31 +190,6 @@
   self->session = NULL;
 }
 
-static gint
-gst_vtenc_get_usage (GstVTEnc * self)
-{
-  gint result;
-
-  GST_OBJECT_LOCK (self);
-  result = self->usage;
-  GST_OBJECT_UNLOCK (self);
-
-  return result;
-}
-
-static void
-gst_vtenc_set_usage (GstVTEnc * self, gint usage)
-{
-  GST_OBJECT_LOCK (self);
-
-  self->usage = usage;
-
-  if (self->session != NULL)
-    gst_vtenc_session_configure_usage (self, self->session, usage);
-
-  GST_OBJECT_UNLOCK (self);
-}
-
 static guint
 gst_vtenc_get_bitrate (GstVTEnc * self)
 {
@@ -260,9 +222,6 @@
   GstVTEnc *self = GST_VTENC_CAST (obj);
 
   switch (prop_id) {
-    case PROP_USAGE:
-      g_value_set_int (value, gst_vtenc_get_usage (self));
-      break;
     case PROP_BITRATE:
       g_value_set_uint (value, gst_vtenc_get_bitrate (self) * 8 / 1000);
       break;
@@ -279,9 +238,6 @@
   GstVTEnc *self = GST_VTENC_CAST (obj);
 
   switch (prop_id) {
-    case PROP_USAGE:
-      gst_vtenc_set_usage (self, g_value_get_int (value));
-      break;
     case PROP_BITRATE:
       gst_vtenc_set_bitrate (self, g_value_get_uint (value) * 1000 / 8);
       break;
@@ -291,117 +247,75 @@
   }
 }
 
-static GstStateChangeReturn
-gst_vtenc_change_state (GstElement * element, GstStateChange transition)
+static gboolean
+gst_vtenc_start (GstVideoEncoder * enc)
 {
-  GstVTEnc *self = GST_VTENC_CAST (element);
-  GError *error = NULL;
-  GstStateChangeReturn ret;
+  GstVTEnc *self = GST_VTENC_CAST (enc);
 
-  if (transition == GST_STATE_CHANGE_NULL_TO_READY) {
-    self->ctx = gst_core_media_ctx_new (GST_API_VIDEO_TOOLBOX, &error);
-    if (error != NULL)
-      goto api_error;
+  self->cur_outframes = g_async_queue_new ();
 
-    self->cur_outbufs = g_ptr_array_new ();
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  if (transition == GST_STATE_CHANGE_READY_TO_NULL) {
-    GST_OBJECT_LOCK (self);
-
-    gst_vtenc_destroy_session (self, &self->session);
-
-    if (self->options != NULL) {
-      CFRelease (self->options);
-      self->options = NULL;
-    }
-
-    self->negotiated_width = self->negotiated_height = 0;
-    self->negotiated_fps_n = self->negotiated_fps_d = 0;
-
-    gst_vtenc_clear_cached_caps_downstream (self);
-
-    GST_OBJECT_UNLOCK (self);
-
-    g_ptr_array_free (self->cur_outbufs, TRUE);
-    self->cur_outbufs = NULL;
-
-    g_object_unref (self->ctx);
-    self->ctx = NULL;
-  }
-
-  return ret;
-
-api_error:
-  {
-    GST_ELEMENT_ERROR (self, RESOURCE, FAILED, ("API error"),
-        ("%s", error->message));
-    g_clear_error (&error);
-    return GST_STATE_CHANGE_FAILURE;
-  }
+  return TRUE;
 }
 
 static gboolean
-gst_vtenc_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+gst_vtenc_stop (GstVideoEncoder * enc)
 {
-  GstVTEnc *self = GST_VTENC_CAST (parent);
-  gboolean forward = TRUE;
-  gboolean res = TRUE;
+  GstVTEnc *self = GST_VTENC_CAST (enc);
 
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CAPS:
-    {
-      GstCaps *caps;
+  GST_OBJECT_LOCK (self);
+  gst_vtenc_destroy_session (self, &self->session);
+  GST_OBJECT_UNLOCK (self);
 
-      gst_event_parse_caps (event, &caps);
-      res = gst_vtenc_sink_setcaps (self, caps);
-    }
-    default:
-      break;
+  if (self->options != NULL) {
+    CFRelease (self->options);
+    self->options = NULL;
   }
 
-  if (forward)
-    res = gst_pad_event_default (pad, parent, event);
-  return res;
+  if (self->input_state)
+    gst_video_codec_state_unref (self->input_state);
+  self->input_state = NULL;
+
+  self->negotiated_width = self->negotiated_height = 0;
+  self->negotiated_fps_n = self->negotiated_fps_d = 0;
+
+  gst_vtenc_clear_cached_caps_downstream (self);
+
+  g_async_queue_unref (self->cur_outframes);
+  self->cur_outframes = NULL;
+
+  return TRUE;
 }
 
 static gboolean
-gst_vtenc_sink_setcaps (GstVTEnc * self, GstCaps * caps)
+gst_vtenc_set_format (GstVideoEncoder * enc, GstVideoCodecState * state)
 {
-  GstStructure *structure;
+  GstVTEnc *self = GST_VTENC_CAST (enc);
   VTCompressionSessionRef session;
 
+  if (self->input_state)
+    gst_video_codec_state_unref (self->input_state);
+  self->input_state = gst_video_codec_state_ref (state);
+
+  self->negotiated_width = state->info.width;
+  self->negotiated_height = state->info.height;
+  self->negotiated_fps_n = state->info.fps_n;
+  self->negotiated_fps_d = state->info.fps_d;
+  self->video_info = state->info;
+
   GST_OBJECT_LOCK (self);
-
-  structure = gst_caps_get_structure (caps, 0);
-  gst_structure_get_int (structure, "width", &self->negotiated_width);
-  gst_structure_get_int (structure, "height", &self->negotiated_height);
-  gst_structure_get_fraction (structure, "framerate",
-      &self->negotiated_fps_n, &self->negotiated_fps_d);
-
-  if (!gst_video_info_from_caps (&self->video_info, caps))
-    return FALSE;
-
   gst_vtenc_destroy_session (self, &self->session);
-
   GST_OBJECT_UNLOCK (self);
+
   session = gst_vtenc_create_session (self);
   GST_OBJECT_LOCK (self);
-
   self->session = session;
+  GST_OBJECT_UNLOCK (self);
 
   if (self->options != NULL)
     CFRelease (self->options);
   self->options = CFDictionaryCreateMutable (NULL, 0,
       &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
 
-  /* renegotiate when upstream caps change */
-  gst_pad_mark_reconfigure (self->srcpad);
-
-  GST_OBJECT_UNLOCK (self);
-
   return TRUE;
 }
 
@@ -417,6 +331,7 @@
   gboolean result;
   GstCaps *caps;
   GstStructure *s;
+  GstVideoCodecState *state;
 
   if (self->caps_width == self->negotiated_width &&
       self->caps_height == self->negotiated_height &&
@@ -425,7 +340,7 @@
     return TRUE;
   }
 
-  caps = gst_pad_get_pad_template_caps (self->srcpad);
+  caps = gst_pad_get_pad_template_caps (GST_VIDEO_ENCODER_SRC_PAD (self));
   caps = gst_caps_make_writable (caps);
   s = gst_caps_get_structure (caps, 0);
   gst_structure_set (s,
@@ -434,7 +349,7 @@
       "framerate", GST_TYPE_FRACTION,
       self->negotiated_fps_n, self->negotiated_fps_d, NULL);
 
-  if (self->details->format_id == kVTFormatH264) {
+  if (self->details->format_id == kCMVideoCodecType_H264) {
     CMFormatDescriptionRef fmt;
     CFDictionaryRef atoms;
     CFStringRef avccKey;
@@ -459,8 +374,11 @@
     gst_buffer_unref (codec_data_buf);
   }
 
-  result = gst_pad_push_event (self->srcpad, gst_event_new_caps (caps));
-  gst_caps_unref (caps);
+  state =
+      gst_video_encoder_set_output_state (GST_VIDEO_ENCODER_CAST (self), caps,
+      self->input_state);
+  gst_video_codec_state_unref (state);
+  result = gst_video_encoder_negotiate (GST_VIDEO_ENCODER_CAST (self));
 
   self->caps_width = self->negotiated_width;
   self->caps_height = self->negotiated_height;
@@ -478,52 +396,42 @@
 }
 
 static GstFlowReturn
-gst_vtenc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+gst_vtenc_handle_frame (GstVideoEncoder * enc, GstVideoCodecFrame * frame)
 {
-  GstVTEnc *self = GST_VTENC_CAST (parent);
+  GstVTEnc *self = GST_VTENC_CAST (enc);
 
   if (!gst_vtenc_is_negotiated (self))
     goto not_negotiated;
 
-  return gst_vtenc_encode_frame (self, buf);
+  return gst_vtenc_encode_frame (self, frame);
 
 not_negotiated:
-  gst_buffer_unref (buf);
+  gst_video_codec_frame_unref (frame);
   return GST_FLOW_NOT_NEGOTIATED;
 }
 
-static gboolean
-gst_vtenc_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+static GstFlowReturn
+gst_vtenc_finish (GstVideoEncoder * enc)
 {
-  GstVTEnc *self = GST_VTENC_CAST (parent);
-  gboolean ret = TRUE;
-  gboolean handled = FALSE;
+  GstVTEnc *self = GST_VTENC_CAST (enc);
+  GstFlowReturn ret = GST_FLOW_OK;
+  OSStatus vt_status;
 
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CUSTOM_UPSTREAM:
-      if (gst_event_has_name (event, "rtcp-pli")) {
-        GST_OBJECT_LOCK (self);
-        if (self->options != NULL) {
-          GST_INFO_OBJECT (self, "received PLI, will force intra");
-          CFDictionaryAddValue (self->options,
-              *(self->ctx->vt->kVTEncodeFrameOptionKey_ForceKeyFrame),
-              kCFBooleanTrue);
-        } else {
-          GST_INFO_OBJECT (self,
-              "received PLI but encode not yet started, ignoring");
-        }
-        GST_OBJECT_UNLOCK (self);
-        handled = TRUE;
-      }
-      break;
-    default:
-      break;
+  vt_status =
+      VTCompressionSessionCompleteFrames (self->session,
+      kCMTimePositiveInfinity);
+  if (vt_status != noErr) {
+    GST_WARNING_OBJECT (self, "VTCompressionSessionCompleteFrames returned %d",
+        (int) vt_status);
   }
 
-  if (handled)
-    gst_event_unref (event);
-  else
-    ret = gst_pad_push_event (self->sinkpad, event);
+  while (g_async_queue_length (self->cur_outframes) > 0) {
+    GstVideoCodecFrame *outframe = g_async_queue_try_pop (self->cur_outframes);
+
+    ret =
+        gst_video_encoder_finish_frame (GST_VIDEO_ENCODER_CAST (self),
+        outframe);
+  }
 
   return ret;
 }
@@ -532,10 +440,8 @@
 gst_vtenc_create_session (GstVTEnc * self)
 {
   VTCompressionSessionRef session = NULL;
-  GstVTApi *vt = self->ctx->vt;
   CFMutableDictionaryRef pb_attrs;
-  VTCompressionOutputCallback callback;
-  VTStatus status;
+  OSStatus status;
 
   pb_attrs = CFDictionaryCreateMutable (NULL, 0, &kCFTypeDictionaryKeyCallBacks,
       &kCFTypeDictionaryValueCallBacks);
@@ -544,16 +450,17 @@
   gst_vtutil_dict_set_i32 (pb_attrs, kCVPixelBufferHeightKey,
       self->negotiated_height);
 
-  callback.func = gst_vtenc_enqueue_buffer;
-  callback.data = self;
-
-  status = vt->VTCompressionSessionCreate (NULL,
+  status = VTCompressionSessionCreate (NULL,
       self->negotiated_width, self->negotiated_height,
-      self->details->format_id, 0, pb_attrs, 0, callback, &session);
+      self->details->format_id, NULL, pb_attrs, NULL, gst_vtenc_enqueue_buffer,
+      self, &session);
   GST_INFO_OBJECT (self, "VTCompressionSessionCreate for %d x %d => %d",
-      self->negotiated_width, self->negotiated_height, status);
-  if (status != kVTSuccess)
+      self->negotiated_width, self->negotiated_height, (int) status);
+  if (status != noErr) {
+    GST_ERROR_OBJECT (self, "VTCompressionSessionCreate() returned: %d",
+        (int) status);
     goto beach;
+  }
 
   if (self->dump_properties) {
     gst_vtenc_session_dump_properties (self, session);
@@ -561,32 +468,40 @@
     self->dump_properties = FALSE;
   }
 
-  gst_vtenc_session_configure_usage (self, session, gst_vtenc_get_usage (self));
-
   gst_vtenc_session_configure_expected_framerate (self, session,
       (gdouble) self->negotiated_fps_n / (gdouble) self->negotiated_fps_d);
-  gst_vtenc_session_configure_expected_duration (self, session,
-      (gdouble) self->negotiated_fps_d / (gdouble) self->negotiated_fps_n);
 
-  status = vt->VTCompressionSessionSetProperty (session,
-      *(vt->kVTCompressionPropertyKey_ProfileLevel),
-      *(vt->kVTProfileLevel_H264_Baseline_3_0));
+  /* FIXME: This is only available since OS X 10.9.6 */
+#if HAVE_IOS
+  status = VTSessionSetProperty (session,
+      kVTCompressionPropertyKey_ProfileLevel,
+      kVTProfileLevel_H264_Baseline_AutoLevel);
   GST_DEBUG_OBJECT (self, "kVTCompressionPropertyKey_ProfileLevel => %d",
-      status);
+      (int) status);
+#endif
 
-  status = vt->VTCompressionSessionSetProperty (session,
-      *(vt->kVTCompressionPropertyKey_AllowTemporalCompression),
-      kCFBooleanTrue);
+  status = VTSessionSetProperty (session,
+      kVTCompressionPropertyKey_AllowTemporalCompression, kCFBooleanTrue);
   GST_DEBUG_OBJECT (self,
-      "kVTCompressionPropertyKey_AllowTemporalCompression => %d", status);
+      "kVTCompressionPropertyKey_AllowTemporalCompression => %d", (int) status);
 
   gst_vtenc_session_configure_max_keyframe_interval (self, session, 0);
-  gst_vtenc_session_configure_max_keyframe_interval_duration (self, session,
-      G_MAXDOUBLE);
+  gst_vtenc_session_configure_max_keyframe_interval_duration (self, session, 0);
 
   gst_vtenc_session_configure_bitrate (self, session,
       gst_vtenc_get_bitrate (self));
 
+#ifdef HAVE_VIDEOTOOLBOX_10_9_6
+  if (VTCompressionSessionPrepareToEncodeFrames) {
+    status = VTCompressionSessionPrepareToEncodeFrames (session);
+    if (status != noErr) {
+      GST_ERROR_OBJECT (self,
+          "VTCompressionSessionPrepareToEncodeFrames() returned: %d",
+          (int) status);
+    }
+  }
+#endif
+
 beach:
   CFRelease (pb_attrs);
 
@@ -596,7 +511,7 @@
 static void
 gst_vtenc_destroy_session (GstVTEnc * self, VTCompressionSessionRef * session)
 {
-  self->ctx->vt->VTCompressionSessionInvalidate (*session);
+  VTCompressionSessionInvalidate (*session);
   if (*session != NULL) {
     CFRelease (*session);
     *session = NULL;
@@ -606,7 +521,6 @@
 typedef struct
 {
   GstVTEnc *self;
-  GstVTApi *vt;
   VTCompressionSessionRef session;
 } GstVTDumpPropCtx;
 
@@ -616,7 +530,7 @@
 {
   gchar *name_str;
   CFTypeRef prop_value;
-  VTStatus status;
+  OSStatus status;
 
   name_str = gst_vtutil_string_to_utf8 (prop_name);
   if (dpc->self->dump_attributes) {
@@ -627,9 +541,8 @@
     g_free (attrs_str);
   }
 
-  status = dpc->vt->VTCompressionSessionCopyProperty (dpc->session, prop_name,
-      NULL, &prop_value);
-  if (status == kVTSuccess) {
+  status = VTSessionCopyProperty (dpc->session, prop_name, NULL, &prop_value);
+  if (status == noErr) {
     gchar *value_str;
 
     value_str = gst_vtutil_object_to_string (prop_value);
@@ -640,7 +553,7 @@
       CFRelease (prop_value);
   } else {
     GST_DEBUG_OBJECT (dpc->self, "%s = <failed to query: %d>",
-        name_str, status);
+        name_str, (int) status);
   }
 
   g_free (name_str);
@@ -650,13 +563,12 @@
 gst_vtenc_session_dump_properties (GstVTEnc * self,
     VTCompressionSessionRef session)
 {
-  GstVTDumpPropCtx dpc = { self, self->ctx->vt, session };
+  GstVTDumpPropCtx dpc = { self, session };
   CFDictionaryRef dict;
-  VTStatus status;
+  OSStatus status;
 
-  status = self->ctx->vt->VTCompressionSessionCopySupportedPropertyDictionary
-      (session, &dict);
-  if (status != kVTSuccess)
+  status = VTSessionCopySupportedPropertyDictionary (session, &dict);
+  if (status != noErr)
     goto error;
   CFDictionaryApplyFunction (dict,
       (CFDictionaryApplierFunction) gst_vtenc_session_dump_property, &dpc);
@@ -669,27 +581,11 @@
 }
 
 static void
-gst_vtenc_session_configure_usage (GstVTEnc * self,
-    VTCompressionSessionRef session, gint usage)
-{
-  gst_vtenc_session_configure_property_int (self, session,
-      *(self->ctx->vt->kVTCompressionPropertyKey_Usage), usage);
-}
-
-static void
 gst_vtenc_session_configure_expected_framerate (GstVTEnc * self,
     VTCompressionSessionRef session, gdouble framerate)
 {
   gst_vtenc_session_configure_property_double (self, session,
-      *(self->ctx->vt->kVTCompressionPropertyKey_ExpectedFrameRate), framerate);
-}
-
-static void
-gst_vtenc_session_configure_expected_duration (GstVTEnc * self,
-    VTCompressionSessionRef session, gdouble duration)
-{
-  gst_vtenc_session_configure_property_double (self, session,
-      *(self->ctx->vt->kVTCompressionPropertyKey_ExpectedDuration), duration);
+      kVTCompressionPropertyKey_ExpectedFrameRate, framerate);
 }
 
 static void
@@ -697,8 +593,7 @@
     VTCompressionSessionRef session, gint interval)
 {
   gst_vtenc_session_configure_property_int (self, session,
-      *(self->ctx->vt->kVTCompressionPropertyKey_MaxKeyFrameInterval),
-      interval);
+      kVTCompressionPropertyKey_MaxKeyFrameInterval, interval);
 }
 
 static void
@@ -706,8 +601,7 @@
     VTCompressionSessionRef session, gdouble duration)
 {
   gst_vtenc_session_configure_property_double (self, session,
-      *(self->ctx->vt->kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration),
-      duration);
+      kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration, duration);
 }
 
 static void
@@ -715,77 +609,145 @@
     VTCompressionSessionRef session, guint bitrate)
 {
   gst_vtenc_session_configure_property_int (self, session,
-      *(self->ctx->vt->kVTCompressionPropertyKey_AverageDataRate), bitrate);
+      kVTCompressionPropertyKey_AverageBitRate, bitrate);
 }
 
-static VTStatus
+static OSStatus
 gst_vtenc_session_configure_property_int (GstVTEnc * self,
     VTCompressionSessionRef session, CFStringRef name, gint value)
 {
   CFNumberRef num;
-  VTStatus status;
+  OSStatus status;
   gchar name_str[128];
 
   num = CFNumberCreate (NULL, kCFNumberIntType, &value);
-  status = self->ctx->vt->VTCompressionSessionSetProperty (session, name, num);
+  status = VTSessionSetProperty (session, name, num);
   CFRelease (num);
 
   CFStringGetCString (name, name_str, sizeof (name_str), kCFStringEncodingUTF8);
-  GST_DEBUG_OBJECT (self, "%s(%d) => %d", name_str, value, status);
+  GST_DEBUG_OBJECT (self, "%s(%d) => %d", name_str, value, (int) status);
 
   return status;
 }
 
-static VTStatus
+static OSStatus
 gst_vtenc_session_configure_property_double (GstVTEnc * self,
     VTCompressionSessionRef session, CFStringRef name, gdouble value)
 {
   CFNumberRef num;
-  VTStatus status;
+  OSStatus status;
   gchar name_str[128];
 
   num = CFNumberCreate (NULL, kCFNumberDoubleType, &value);
-  status = self->ctx->vt->VTCompressionSessionSetProperty (session, name, num);
+  status = VTSessionSetProperty (session, name, num);
   CFRelease (num);
 
   CFStringGetCString (name, name_str, sizeof (name_str), kCFStringEncodingUTF8);
-  GST_DEBUG_OBJECT (self, "%s(%f) => %d", name_str, value, status);
+  GST_DEBUG_OBJECT (self, "%s(%f) => %d", name_str, value, (int) status);
 
   return status;
 }
 
 static GstFlowReturn
-gst_vtenc_encode_frame (GstVTEnc * self, GstBuffer * buf)
+gst_vtenc_encode_frame (GstVTEnc * self, GstVideoCodecFrame * frame)
 {
-  GstVTApi *vt = self->ctx->vt;
   CMTime ts, duration;
   GstCoreMediaMeta *meta;
   CVPixelBufferRef pbuf = NULL;
-  VTStatus vt_status;
+  OSStatus vt_status;
   GstFlowReturn ret = GST_FLOW_OK;
   guint i;
+  gboolean forced_keyframe = FALSE;
 
-  self->cur_inbuf = buf;
-
-  ts = CMTimeMake (GST_TIME_AS_MSECONDS (GST_BUFFER_TIMESTAMP (buf)), 1000);
-  duration = CMTimeMake
-      (GST_TIME_AS_MSECONDS (GST_BUFFER_DURATION (buf)), 1000);
-
-  meta = gst_buffer_get_core_media_meta (buf);
-  if (meta != NULL) {
-    pbuf = gst_core_media_buffer_get_pixel_buffer (buf);
+  if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame)) {
+    if (self->options != NULL) {
+      GST_INFO_OBJECT (self, "received force-keyframe-event, will force intra");
+      CFDictionaryAddValue (self->options,
+          kVTEncodeFrameOptionKey_ForceKeyFrame, kCFBooleanTrue);
+      forced_keyframe = TRUE;
+    } else {
+      GST_INFO_OBJECT (self,
+          "received force-keyframe-event but encode not yet started, ignoring");
+    }
   }
 
+  ts = CMTimeMake (frame->pts, GST_SECOND);
+  if (frame->duration != GST_CLOCK_TIME_NONE)
+    duration = CMTimeMake (frame->duration, GST_SECOND);
+  else
+    duration = kCMTimeInvalid;
+
+  meta = gst_buffer_get_core_media_meta (frame->input_buffer);
+  if (meta != NULL) {
+    pbuf = gst_core_media_buffer_get_pixel_buffer (frame->input_buffer);
+  }
+#ifdef HAVE_IOS
   if (pbuf == NULL) {
-    GstVTEncFrame *frame;
+    GstVideoFrame inframe, outframe;
+    GstBuffer *outbuf;
+    OSType pixel_format_type;
     CVReturn cv_ret;
 
-    frame = gst_vtenc_frame_new (buf, &self->video_info);
-    if (!frame)
+    /* FIXME: iOS has special stride requirements that we don't know yet.
+     * Copy into a newly allocated pixelbuffer for now. Probably makes
+     * sense to create a buffer pool around these at some point.
+     */
+
+    switch (GST_VIDEO_INFO_FORMAT (&self->video_info)) {
+      case GST_VIDEO_FORMAT_I420:
+        pixel_format_type = kCVPixelFormatType_420YpCbCr8Planar;
+        break;
+      case GST_VIDEO_FORMAT_NV12:
+        pixel_format_type = kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange;
+        break;
+      default:
+        goto cv_error;
+    }
+
+    if (!gst_video_frame_map (&inframe, &self->video_info, frame->input_buffer,
+            GST_MAP_READ))
+      goto cv_error;
+
+    cv_ret =
+        CVPixelBufferCreate (NULL, self->negotiated_width,
+        self->negotiated_height, pixel_format_type, NULL, &pbuf);
+
+    if (cv_ret != kCVReturnSuccess) {
+      gst_video_frame_unmap (&inframe);
+      goto cv_error;
+    }
+
+    outbuf = gst_core_video_buffer_new ((CVBufferRef) pbuf, &self->video_info);
+    if (!gst_video_frame_map (&outframe, &self->video_info, outbuf,
+            GST_MAP_WRITE)) {
+      gst_video_frame_unmap (&inframe);
+      gst_buffer_unref (outbuf);
+      CVPixelBufferRelease (pbuf);
+      goto cv_error;
+    }
+
+    if (!gst_video_frame_copy (&outframe, &inframe)) {
+      gst_video_frame_unmap (&inframe);
+      gst_buffer_unref (outbuf);
+      CVPixelBufferRelease (pbuf);
+      goto cv_error;
+    }
+
+    gst_buffer_unref (outbuf);
+    gst_video_frame_unmap (&inframe);
+    gst_video_frame_unmap (&outframe);
+  }
+#else
+  if (pbuf == NULL) {
+    GstVTEncFrame *vframe;
+    CVReturn cv_ret;
+
+    vframe = gst_vtenc_frame_new (frame->input_buffer, &self->video_info);
+    if (!vframe)
       goto cv_error;
 
     {
-      const size_t num_planes = GST_VIDEO_FRAME_N_PLANES (&frame->videoframe);
+      const size_t num_planes = GST_VIDEO_FRAME_N_PLANES (&vframe->videoframe);
       void *plane_base_addresses[GST_VIDEO_MAX_PLANES];
       size_t plane_widths[GST_VIDEO_MAX_PLANES];
       size_t plane_heights[GST_VIDEO_MAX_PLANES];
@@ -795,13 +757,13 @@
 
       for (i = 0; i < num_planes; i++) {
         plane_base_addresses[i] =
-            GST_VIDEO_FRAME_PLANE_DATA (&frame->videoframe, i);
-        plane_widths[i] = GST_VIDEO_FRAME_COMP_WIDTH (&frame->videoframe, i);
-        plane_heights[i] = GST_VIDEO_FRAME_COMP_HEIGHT (&frame->videoframe, i);
+            GST_VIDEO_FRAME_PLANE_DATA (&vframe->videoframe, i);
+        plane_widths[i] = GST_VIDEO_FRAME_COMP_WIDTH (&vframe->videoframe, i);
+        plane_heights[i] = GST_VIDEO_FRAME_COMP_HEIGHT (&vframe->videoframe, i);
         plane_bytes_per_row[i] =
-            GST_VIDEO_FRAME_COMP_STRIDE (&frame->videoframe, i);
+            GST_VIDEO_FRAME_COMP_STRIDE (&vframe->videoframe, i);
         plane_bytes_per_row[i] =
-            GST_VIDEO_FRAME_COMP_STRIDE (&frame->videoframe, i);
+            GST_VIDEO_FRAME_COMP_STRIDE (&vframe->videoframe, i);
       }
 
       switch (GST_VIDEO_INFO_FORMAT (&self->video_info)) {
@@ -819,110 +781,114 @@
           self->negotiated_width, self->negotiated_height,
           pixel_format_type,
           frame,
-          GST_VIDEO_FRAME_SIZE (&frame->videoframe),
+          GST_VIDEO_FRAME_SIZE (&vframe->videoframe),
           num_planes,
           plane_base_addresses,
           plane_widths,
           plane_heights,
-          plane_bytes_per_row, gst_pixel_buffer_release_cb, frame, NULL, &pbuf);
+          plane_bytes_per_row, gst_pixel_buffer_release_cb, vframe, NULL,
+          &pbuf);
       if (cv_ret != kCVReturnSuccess) {
-        gst_vtenc_frame_free (frame);
+        gst_vtenc_frame_free (vframe);
         goto cv_error;
       }
     }
   }
+#endif
 
-  GST_OBJECT_LOCK (self);
+  /* We need to unlock the stream lock here because
+   * it can wait for gst_vtenc_enqueue_buffer() to
+   * handle a buffer... which will take the stream
+   * lock from another thread and then deadlock */
+  GST_VIDEO_ENCODER_STREAM_UNLOCK (self);
+  vt_status = VTCompressionSessionEncodeFrame (self->session,
+      pbuf, ts, duration, self->options,
+      GINT_TO_POINTER (frame->system_frame_number), NULL);
+  GST_VIDEO_ENCODER_STREAM_LOCK (self);
 
-  self->expect_keyframe = CFDictionaryContainsKey (self->options,
-      *(vt->kVTEncodeFrameOptionKey_ForceKeyFrame));
-  if (self->expect_keyframe)
-    gst_vtenc_clear_cached_caps_downstream (self);
-
-  vt_status = self->ctx->vt->VTCompressionSessionEncodeFrame (self->session,
-      pbuf, ts, duration, self->options, NULL, NULL);
-
-  if (vt_status != 0) {
-    GST_WARNING_OBJECT (self, "VTCompressionSessionEncodeFrame returned %d",
-        vt_status);
+  /* Only force one keyframe */
+  if (forced_keyframe) {
+    CFDictionaryRemoveValue (self->options,
+        kVTEncodeFrameOptionKey_ForceKeyFrame);
   }
 
-  self->ctx->vt->VTCompressionSessionCompleteFrames (self->session,
-      kCMTimeInvalid);
+  if (vt_status != noErr) {
+    GST_WARNING_OBJECT (self, "VTCompressionSessionEncodeFrame returned %d",
+        (int) vt_status);
+  }
 
-  GST_OBJECT_UNLOCK (self);
+  gst_video_codec_frame_unref (frame);
 
   CVPixelBufferRelease (pbuf);
-  self->cur_inbuf = NULL;
-  gst_buffer_unref (buf);
 
-  if (self->cur_outbufs->len > 0) {
-    meta =
-        gst_buffer_get_core_media_meta (g_ptr_array_index (self->cur_outbufs,
-            0));
-    if (!gst_vtenc_negotiate_downstream (self, meta->sample_buf))
-      ret = GST_FLOW_NOT_NEGOTIATED;
-  }
+  i = 0;
+  while (g_async_queue_length (self->cur_outframes) > 0) {
+    GstVideoCodecFrame *outframe = g_async_queue_try_pop (self->cur_outframes);
 
-  for (i = 0; i != self->cur_outbufs->len; i++) {
-    GstBuffer *buf = g_ptr_array_index (self->cur_outbufs, i);
-
-    if (ret == GST_FLOW_OK) {
-      ret = gst_pad_push (self->srcpad, buf);
-    } else {
-      gst_buffer_unref (buf);
+    /* Try to renegotiate once */
+    if (i == 0) {
+      meta = gst_buffer_get_core_media_meta (outframe->output_buffer);
+      if (!gst_vtenc_negotiate_downstream (self, meta->sample_buf)) {
+        ret = GST_FLOW_NOT_NEGOTIATED;
+        gst_video_codec_frame_unref (outframe);
+        break;
+      }
     }
+
+    ret =
+        gst_video_encoder_finish_frame (GST_VIDEO_ENCODER_CAST (self),
+        outframe);
+    i++;
   }
-  g_ptr_array_set_size (self->cur_outbufs, 0);
 
   return ret;
 
 cv_error:
   {
-    self->cur_inbuf = NULL;
-    gst_buffer_unref (buf);
-
+    gst_video_codec_frame_unref (frame);
     return GST_FLOW_ERROR;
   }
 }
 
-static VTStatus
-gst_vtenc_enqueue_buffer (void *data, int a2, int a3, int a4,
-    CMSampleBufferRef sbuf, int a6, int a7)
+static void
+gst_vtenc_enqueue_buffer (void *outputCallbackRefCon,
+    void *sourceFrameRefCon,
+    OSStatus status,
+    VTEncodeInfoFlags infoFlags, CMSampleBufferRef sampleBuffer)
 {
-  GstVTEnc *self = data;
+  GstVTEnc *self = outputCallbackRefCon;
   gboolean is_keyframe;
-  GstBuffer *buf;
+  GstVideoCodecFrame *frame;
+
+  if (status != noErr) {
+    GST_ELEMENT_ERROR (self, LIBRARY, ENCODE, (NULL), ("Failed to encode: %d",
+            (int) status));
+    goto beach;
+  }
 
   /* This may happen if we don't have enough bitrate */
-  if (sbuf == NULL)
+  if (sampleBuffer == NULL)
     goto beach;
 
-  is_keyframe = gst_vtenc_buffer_is_keyframe (self, sbuf);
-  if (self->expect_keyframe) {
-    if (!is_keyframe)
-      goto beach;
-    CFDictionaryRemoveValue (self->options,
-        *(self->ctx->vt->kVTEncodeFrameOptionKey_ForceKeyFrame));
+  is_keyframe = gst_vtenc_buffer_is_keyframe (self, sampleBuffer);
+
+  frame =
+      gst_video_encoder_get_frame (GST_VIDEO_ENCODER_CAST (self),
+      GPOINTER_TO_INT (sourceFrameRefCon));
+
+  if (is_keyframe) {
+    GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
+    gst_vtenc_clear_cached_caps_downstream (self);
   }
-  self->expect_keyframe = FALSE;
 
   /* We are dealing with block buffers here, so we don't need
    * to enable the use of the video meta API on the core media buffer */
-  buf = gst_core_media_buffer_new (sbuf, FALSE);
-  gst_buffer_copy_into (buf, self->cur_inbuf, GST_BUFFER_COPY_TIMESTAMPS,
-      0, -1);
-  if (is_keyframe) {
-    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
-  } else {
-    GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT);
-    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
-  }
+  frame->output_buffer = gst_core_media_buffer_new (sampleBuffer, FALSE);
 
-  g_ptr_array_add (self->cur_outbufs, buf);
+  g_async_queue_push (self->cur_outframes, frame);
 
 beach:
-  return kVTSuccess;
+  return;
 }
 
 static gboolean
@@ -945,6 +911,7 @@
   return result;
 }
 
+#ifndef HAVE_IOS
 static GstVTEncFrame *
 gst_vtenc_frame_new (GstBuffer * buf, GstVideoInfo * video_info)
 {
@@ -974,9 +941,9 @@
     size_t dataSize, size_t numberOfPlanes, const void *planeAddresses[])
 {
   GstVTEncFrame *frame = (GstVTEncFrame *) releaseRefCon;
-
   gst_vtenc_frame_free (frame);
 }
+#endif
 
 static void
 gst_vtenc_register (GstPlugin * plugin,
@@ -989,7 +956,7 @@
     (GClassInitFunc) gst_vtenc_class_init,
     NULL,
     NULL,
-    sizeof (GstVTEncClass),
+    sizeof (GstVTEnc),
     0,
     (GInstanceInitFunc) gst_vtenc_init,
   };
@@ -999,7 +966,8 @@
 
   type_name = g_strdup_printf ("vtenc_%s", codec_details->element_name);
 
-  type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &type_info, 0);
+  type =
+      g_type_register_static (GST_TYPE_VIDEO_ENCODER, type_name, &type_info, 0);
 
   g_type_set_qdata (type, GST_VTENC_CODEC_DETAILS_QDATA,
       (gpointer) codec_details);
@@ -1013,7 +981,7 @@
 }
 
 static const GstVTEncoderDetails gst_vtenc_codecs[] = {
-  {"H.264", "h264", "video/x-h264", kVTFormatH264},
+  {"H.264", "h264", "video/x-h264", kCMVideoCodecType_H264},
 };
 
 void
diff --git a/sys/applemedia/vtenc.h b/sys/applemedia/vtenc.h
index 776e04b..6ba70df 100644
--- a/sys/applemedia/vtenc.h
+++ b/sys/applemedia/vtenc.h
@@ -22,8 +22,7 @@
 
 #include <gst/gst.h>
 #include <gst/video/video.h>
-
-#include "coremediactx.h"
+#include <VideoToolbox/VideoToolbox.h>
 
 G_BEGIN_DECLS
 
@@ -44,28 +43,22 @@
   const gchar * name;
   const gchar * element_name;
   const gchar * mimetype;
-  VTFormatId format_id;
+  CMVideoCodecType format_id;
 };
 
 struct _GstVTEncClass
 {
-  GstElementClass parent_class;
+  GstVideoEncoderClass parent_class;
 };
 
 struct _GstVTEnc
 {
-  GstElement parent;
+  GstVideoEncoder parent;
 
   const GstVTEncoderDetails * details;
 
-  GstPad * sinkpad;
-  GstPad * srcpad;
-
-  gint usage;
   guint bitrate;
 
-  GstCoreMediaCtx * ctx;
-
   gboolean dump_properties;
   gboolean dump_attributes;
 
@@ -73,13 +66,12 @@
   gint negotiated_fps_n, negotiated_fps_d;
   gint caps_width, caps_height;
   gint caps_fps_n, caps_fps_d;
+  GstVideoCodecState *input_state;
   GstVideoInfo video_info;
   VTCompressionSessionRef session;
   CFMutableDictionaryRef options;
 
-  GstBuffer * cur_inbuf;
-  GPtrArray * cur_outbufs;
-  gboolean expect_keyframe;
+  GAsyncQueue * cur_outframes;
 };
 
 void gst_vtenc_register_elements (GstPlugin * plugin);
diff --git a/sys/applemedia/vth264decbin.h b/sys/applemedia/vth264decbin.h
deleted file mode 100644
index 1c039f0..0000000
--- a/sys/applemedia/vth264decbin.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_VTH264DECBIN_H__
-#define __GST_VTH264DECBIN_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_VT_H264_DEC_BIN (gst_vt_h264_dec_bin_get_type())
-#define GST_VT_H264_DEC_BIN(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_VT_H264_DEC_BIN, \
-  GstVTH264DecBin))
-#define GST_VT_H264_DEC_BIN_CAST(obj) \
-  ((GstVTH264DecBin *) (obj))
-#define GST_VT_H264_DEC_BIN_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_VT_H264_DEC_BIN, \
-  GstVTH264DecBinClass))
-#define GST_IS_VT_H264_DEC_BIN(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_VT_H264_DEC_BIN))
-#define GST_IS_VT_H264_DEC_BIN_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_VT_H264_DEC_BIN))
-
-typedef struct _GstVTH264DecBin        GstVTH264DecBin;
-typedef struct _GstVTH264DecBinPrivate GstVTH264DecBinPrivate;
-typedef struct _GstVTH264DecBinClass   GstVTH264DecBinClass;
-
-struct _GstVTH264DecBin
-{
-  GstBin parent;
-
-  GstVTH264DecBinPrivate * priv;
-};
-
-struct _GstVTH264DecBinClass
-{
-  GstBinClass parent_class;
-};
-
-GType gst_vt_h264_dec_bin_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_VTH264DECBIN_H__ */
diff --git a/sys/applemedia/vth264encbin.h b/sys/applemedia/vth264encbin.h
deleted file mode 100644
index 6bfb54a..0000000
--- a/sys/applemedia/vth264encbin.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2010 Ole André Vadla Ravnås <oleavr@soundrop.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_VTH264ENCBIN_H__
-#define __GST_VTH264ENCBIN_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_VT_H264_ENC_BIN (gst_vt_h264_enc_bin_get_type())
-#define GST_VT_H264_ENC_BIN(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_VT_H264_ENC_BIN, \
-  GstVTH264EncBin))
-#define GST_VT_H264_ENC_BIN_CAST(obj) \
-  ((GstVTH264EncBin *) (obj))
-#define GST_VT_H264_ENC_BIN_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_VT_H264_ENC_BIN, \
-  GstVTH264EncBinClass))
-#define GST_IS_VT_H264_ENC_BIN(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_VT_H264_ENC_BIN))
-#define GST_IS_VT_H264_ENC_BIN_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_VT_H264_ENC_BIN))
-
-typedef struct _GstVTH264EncBin        GstVTH264EncBin;
-typedef struct _GstVTH264EncBinPrivate GstVTH264EncBinPrivate;
-typedef struct _GstVTH264EncBinClass   GstVTH264EncBinClass;
-
-struct _GstVTH264EncBin
-{
-  GstBin parent;
-
-  GstVTH264EncBinPrivate * priv;
-};
-
-struct _GstVTH264EncBinClass
-{
-  GstBinClass parent_class;
-};
-
-GType gst_vt_h264_enc_bin_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_VTH264ENCBIN_H__ */
diff --git a/tests/check/libs/vc1parser.c b/tests/check/libs/vc1parser.c
index 1d00e19..cb0bce7 100644
--- a/tests/check/libs/vc1parser.c
+++ b/tests/check/libs/vc1parser.c
@@ -1227,7 +1227,7 @@
   assert_equals_int (seq_layer.struct_a.vert_size, 48);
   assert_equals_int (seq_layer.struct_a.horiz_size, 48);
 
-  assert_equals_int (seq_layer.struct_b.level, GST_VC1_LEVEL_HIGH);
+  assert_equals_int (seq_layer.struct_b.level, GST_VC1_LEVEL_MEDIUM);
   assert_equals_int (seq_layer.struct_b.cbr, 1);
   assert_equals_int (seq_layer.struct_b.framerate, 29);
   assert_equals_int (seq_layer.struct_b.hrd_buffer, 0);
diff --git a/tests/examples/gl/sdl/sdlshare.c b/tests/examples/gl/sdl/sdlshare.c
index 9d8906d..bc54eae 100644
--- a/tests/examples/gl/sdl/sdlshare.c
+++ b/tests/examples/gl/sdl/sdlshare.c
@@ -288,10 +288,7 @@
 #else
   SDL_VERSION (&info.version);
   SDL_GetWMInfo (&info);
-  /* FIXME: This display is different to the one that SDL uses to create the
-   * GL context inside SDL_SetVideoMode() above which fails on Intel hardware
-   */
-  sdl_display = info.info.x11.display;
+  sdl_display = info.info.x11.gfxdisplay;
   sdl_win = info.info.x11.window;
   sdl_gl_context = glXGetCurrentContext ();
   glXMakeCurrent (sdl_display, None, 0);
diff --git a/win32/common/config.h b/win32/common/config.h
index 7f33f20..4c5db01 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 "2014-09-24"
+#define GST_PACKAGE_RELEASE_DATETIME "2014-11-06"
 
 /* Define if static plugins should be built */
 #undef GST_PLUGIN_BUILD_STATIC
@@ -547,6 +547,9 @@
 /* Define if building with VideoToolbox */
 #undef HAVE_VIDEOTOOLBOX
 
+/* Define if building with VideoToolbox >= 10.9.6 */
+#undef HAVE_VIDEOTOOLBOX_10_9_6
+
 /* Define to enable vo-aacenc library (used by vo-aacenc). */
 #undef HAVE_VOAACENC
 
@@ -637,7 +640,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.4.3"
+#define PACKAGE_STRING "GStreamer Bad Plug-ins 1.4.4"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gst-plugins-bad"
@@ -646,7 +649,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.4.3"
+#define PACKAGE_VERSION "1.4.4"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -686,7 +689,7 @@
 #undef USE_EGL_RPI
 
 /* Version number of package */
-#define VERSION "1.4.3"
+#define VERSION "1.4.4"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */