diff --git a/debian/build-deps b/debian/build-deps
index d971fbe..8bccffd 100644
--- a/debian/build-deps
+++ b/debian/build-deps
@@ -34,11 +34,11 @@
 libsoup2.4-dev (>= 2.48)
 libpulse-dev (>= 2.0)
 libbz2-dev
-gstreamer@GST_ABI@-doc
-gstreamer@GST_ABI@-plugins-base-doc
 libjack-jackd2-dev
 libvpx-dev (>= 1.3.0)
 libmp3lame-dev
 libmpg123-dev (>= 1.13)
 libtwolame-dev (>= 0.3.10)
-
+qtbase5-dev
+qtdeclarative5-dev
+libqt5x11extras5-dev
diff --git a/debian/build-deps.in b/debian/build-deps.in
deleted file mode 100644
index 2a7ef91..0000000
--- a/debian/build-deps.in
+++ /dev/null
@@ -1,46 +0,0 @@
-@GST_LIB_DEV_DEP@
-@GST_EXTRA_BUILD_DEPENDS@
-libgstreamer-plugins-base@GST_ABI@-dev (>= 1.14.4)
-autotools-dev
-dh-autoreconf
-automake (>= 1.14)
-autoconf (>= 2.69)
-libtool (>= 2.2.6)
-autopoint (>= 0.17)
-cdbs (>= 0.4.93)
-debhelper (>= 9)
-dpkg-dev (>= 1.15.1)
-pkg-config (>= 0.11.0)
-gtk-doc-tools (>= 1.12)
-libglib2.0-dev (>= 2.40)
-liborc-0.4-dev (>= 1:0.4.17)
-libcairo2-dev (>= 1.10.0)
-libcaca-dev
-libspeex-dev (>= 1.1.6)
-libpng-dev
-libshout3-dev
-libjpeg-dev
-libaa1-dev (>= 1.4p5)
-libflac-dev (>= 1.1.4)
-libdv4-dev | libdv-dev
-libxdamage-dev
-libxext-dev
-libxfixes-dev
-libxv-dev
-libgtk-3-dev (>= 3.15)
-libtag1-dev (>= 1.5)
-libwavpack-dev (>= 4.60)
-gstreamer@GST_ABI@-plugins-base (>= 1.14.4)
-libsoup2.4-dev (>= 2.48)
-libpulse-dev (>= 2.0)
-libbz2-dev
-gstreamer@GST_ABI@-doc
-gstreamer@GST_ABI@-plugins-base-doc
-libjack-jackd2-dev
-libvpx-dev (>= 1.3.0)
-libmp3lame-dev
-libmpg123-dev (>= 1.13)
-libtwolame-dev (>= 0.3.10)
-qtbase5-dev
-qtdeclarative5-dev
-libqt5x11extras5-dev
diff --git a/debian/changelog b/debian/changelog
index 9656ff3..ea73bcf 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3160 +1,6 @@
-gst-plugins-good1.0 (1.14.4-1+mtk+1) mendel-eagle; urgency=medium
+mtk-gst-plugins-good (1.14.4+mtk-1) mendel-day; urgency=medium
 
-  * Update to Eagle release
-  * v4l2 feature fix
+  * 1.14.4
 
- -- Coral Team <coral-support@google.com>  Thu, 10 Sep 2020 10:46:41 -0700
-
-gst-plugins-good1.0 (1.14.4-1+mtk) mendel-day; urgency=medium
-
-  * Update to debian 1.14.4-1
-  * Update to Day release
-  * Remove doc from package
-  * Remove qt5 from package
-
- -- Coral Team <coral-support@google.com>  Wed, 29 Jan 2020 20:01:36 -0800
-
-gst-plugins-good1.0 (1.10.4-1+mtk) mendel-chef; urgency=medium
-
-  * Add Mediatek patches
-
- -- Coral <coral-support@google.com>  Wed, 07 Aug 2019 11:28:56 -0700
-
-gst-plugins-good1.0 (1.10.4-1) unstable; urgency=medium
-
-  * New upstream bugfix release
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 23 Feb 2017 15:36:20 +0200
-
-gst-plugins-good1.0 (1.10.3-1) unstable; urgency=medium
-
-  * New upstream bugfix release
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 30 Jan 2017 15:48:14 +0200
-
-gst-plugins-good1.0 (1.10.2-1) unstable; urgency=medium
-
-  * New upstream bugfix release
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 29 Nov 2016 15:41:46 +0200
-
-gst-plugins-good1.0 (1.10.1-2) unstable; urgency=high
-
-  * debian/patches/0001-flxdec-add-some-write-bounds-checking.patch,
-    debian/patches/0002-flxdec-fix-some-warnings-comparing-unsigned-0.patch,
-    debian/patches/0003-flxdec-Don-t-unref-parent-in-the-chain-function.patch,
-    debian/patches/0004-flxdec-rewrite-logic-based-on-GstByteReader-Writer.patch:
-    + Fix out of bound memory writes/reads (CVE-2016-9634, CVE-2016-9635, CVE-2016-9636).
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 24 Nov 2016 12:26:58 +0200
-
-gst-plugins-good1.0 (1.10.1-1) unstable; urgency=medium
-
-  * New upstream bugfix release
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 17 Nov 2016 14:59:48 +0200
-
-gst-plugins-good1.0 (1.10.0-1) unstable; urgency=medium
-
-  [ Helmut Grohne ]
-  * Mark gstreamer1.0-doc Multi-Arch: foreign (Closes: #842526).
-
-  [ Sebastian Dröge ]
-  * New upstream stable release.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 01 Nov 2016 17:49:48 +0200
-
-gst-plugins-good1.0 (1.9.90-1) experimental; urgency=medium
-
-  * New upstream unstable release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build-depend on GStreamer >= 1.9.90.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 30 Sep 2016 12:21:28 +0300
-
-gst-plugins-good1.0 (1.9.2-1) experimental; urgency=medium
-
-  * New upstream unstable release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build-depend on GStreamer >= 1.9.2.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 01 Sep 2016 12:07:12 +0300
-
-gst-plugins-good1.0 (1.9.1-1) experimental; urgency=medium
-
-  * New upstream unstable release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build-depend on GStreamer >= 1.9.1.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 06 Jul 2016 12:42:10 +0300
-
-gst-plugins-good1.0 (1.8.2-1) unstable; urgency=medium
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 09 Jun 2016 11:26:53 +0300
-
-gst-plugins-good1.0 (1.8.1-1) unstable; urgency=medium
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 20 Apr 2016 18:13:46 +0300
-
-gst-plugins-good1.0 (1.8.0-1) unstable; urgency=medium
-
-  * New upstream stable release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build-depend on GStreamer >= 1.8.0.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 24 Mar 2016 12:23:30 +0200
-
-gst-plugins-good1.0 (1.7.91-1) experimental; urgency=medium
-
-  * New upstream release candidate:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build-depend on GStreamer >= 1.7.91.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 15 Mar 2016 12:05:31 +0200
-
-gst-plugins-good1.0 (1.7.90-1) experimental; urgency=medium
-
-  * New upstream release candidate:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build-depend on GStreamer >= 1.7.90.
-    + debian/control.in:
-      - Add Breaks for gst-plugins-bad << 1.7.90 because of the moved
-        Opus RTP payloader/depayloader.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 01 Mar 2016 17:13:54 +0200
-
-gst-plugins-good1.0 (1.7.2-1) experimental; urgency=medium
-
-  * New upstream unstable release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build-depend on GStreamer >= 1.7.2.
-    + debian/control.in:
-      - Add Breaks for gst-plugins-bad << 1.7.2 because of the moved
-        h265/HEVC RTP payloader/depayloader.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 19 Feb 2016 11:19:04 +0200
-
-gst-plugins-good1.0 (1.7.1-1) experimental; urgency=medium
-
-  * New upstream unstable release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build-depend on GLib >= 2.40 and GStreamer >= 1.7.1.
-      - Build-depend on Soup >= 2.48.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 24 Dec 2015 14:13:58 +0100
-
-gst-plugins-good1.0 (1.6.2-1) unstable; urgency=medium
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 14 Dec 2015 19:29:59 +0100
-
-gst-plugins-good1.0 (1.6.1-1) unstable; urgency=medium
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 30 Oct 2015 16:37:44 +0200
-
-gst-plugins-good1.0 (1.6.0-1) unstable; urgency=medium
-
-  * New upstream stable release.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 25 Sep 2015 22:57:18 +0200
-
-gst-plugins-good1.0 (1.5.91-1) experimental; urgency=medium
-
-  * New upstream release candidate.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 18 Sep 2015 19:28:00 +0200
-
-gst-plugins-good1.0 (1.5.90-1) experimental; urgency=medium
-
-  * New upstream release candidate.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 19 Aug 2015 13:21:38 +0300
-
-gst-plugins-good1.0 (1.5.2-1) experimental; urgency=medium
-
-  [ Iain Lane ]
-  * debian/watch: Update for current URL scheme
-
-  [ Sebastian Dröge ]
-  * New unstable upstream release.
-
- -- Iain Lane <laney@debian.org>  Mon, 15 Jun 2015 10:56:07 +0100
-
-gst-plugins-good1.0 (1.5.1-1) experimental; urgency=medium
-
-  * New unstable upstream release.
-
- -- Sebastian Dröge <slomo@debian.org>  Sun, 07 Jun 2015 10:45:39 +0200
-
-gst-plugins-good1.0 (1.5.0.1+git20150513-1) experimental; urgency=medium
-
-  * New upstream GIT snapshot.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 13 May 2015 13:24:34 +0300
-
-gst-plugins-good1.0 (1.5.0.1+git20150316-1) experimental; urgency=medium
-
-  * New upstream GIT snapshot.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 17 Mar 2015 09:14:23 +0100
-
-gst-plugins-good1.0 (1.4.5-1) experimental; urgency=medium
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 18 Dec 2014 12:24:06 +0100
-
-gst-plugins-good1.0 (1.4.4-2) unstable; urgency=medium
-
-  * Upload to unstable.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 11 Nov 2014 13:39:56 +0100
-
-gst-plugins-good1.0 (1.4.4-1) experimental; urgency=medium
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 06 Nov 2014 12:47:03 +0100
-
-gst-plugins-good1.0 (1.4.3-2) unstable; urgency=medium
-
-  * debian/patches/rtpmux-Don-t-set-PROXY_CAPS-flag-on-the-src-pad.patch
-    + Added. Fix caps negotation in the rtpmux element, fixes Empathy voice
-      calls (Closes: #760964) (From upstream git)
-
- -- Sjoerd Simons <sjoerd@debian.org>  Fri, 17 Oct 2014 22:35:46 +0200
-
-gst-plugins-good1.0 (1.4.3-1) unstable; urgency=medium
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 24 Sep 2014 12:08:04 +0300
-
-gst-plugins-good1.0 (1.4.2-1) unstable; urgency=medium
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 19 Sep 2014 14:27:09 +0300
-
-gst-plugins-good1.0 (1.4.1-1) unstable; urgency=medium
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 27 Aug 2014 14:35:19 +0300
-
-gst-plugins-good1.0 (1.4.0-1) unstable; urgency=medium
-
-  * New upstream stable release.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 19 Jul 2014 17:04:19 +0200
-
-gst-plugins-good1.0 (1.3.91-1) experimental; urgency=medium
-
-  * New upstream release candidate:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build-depend on GStreamer core and base >= 1.3.91.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 11 Jul 2014 11:30:26 +0200
-
-gst-plugins-good1.0 (1.3.90-1) experimental; urgency=medium
-
-  * New upstream release candidate:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build-depend on GStreamer core and base >= 1.3.90.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 28 Jun 2014 11:44:49 +0200
-
-gst-plugins-good1.0 (1.3.3-1) experimental; urgency=medium
-
-  * New upstream development release:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build-depend on GStreamer core and base >= 1.3.2.
-  * debian/rules:
-    + Run autopoint during autoreconf too.
-
- -- Sebastian Dröge <slomo@debian.org>  Sun, 22 Jun 2014 18:01:49 +0200
-
-gst-plugins-good1.0 (1.3.2-1) experimental; urgency=medium
-
-  * New upstream development release:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build-depend on GStreamer core and base >= 1.3.2.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 21 May 2014 12:38:54 +0200
-
-gst-plugins-good1.0 (1.3.1-1) experimental; urgency=medium
-
-  * New upstream development release:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build-depend on GStreamer core and base >= 1.3.1.
-      - Build-depend on libsoup >= 2.40.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 03 May 2014 19:02:39 +0200
-
-gst-plugins-good1.0 (1.2.4-1) unstable; urgency=medium
-
-  * New upstream bugfix release:
-    + debian/rules:
-      - Build-depend on gstreamer >= 1.2.4.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 19 Apr 2014 15:56:43 +0200
-
-gst-plugins-good1.0 (1.2.3-1) unstable; urgency=medium
-
-  [ Iain Lane ]
-  * Drop ltmain-as-needed patch and do the same with dh_autoreconf
-    --as-needed.
-  * Enable parallel builds 
-
-  [ Sebastian Dröge ]
-  * New upstream bugfix release:
-    + debian/build-deps.in:
-      - Build-depend on gst-plugins-base >= 1.2.3.
-
- -- Sebastian Dröge <slomo@debian.org>  Sun, 09 Feb 2014 11:23:29 +0100
-
-gst-plugins-good1.0 (1.2.2-1) unstable; urgency=medium
-
-  * New upstream bugfix release.
-  * debian/build-deps.in:
-    + Build-depend on libvpx-dev >= 1.3.0 for VP9 support.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 27 Dec 2013 11:00:18 +0100
-
-gst-plugins-good1.0 (1.2.1-1) unstable; urgency=low
-
-  [ Fabian Greffrath ]
-  * Team upload.
-  * Add Vcs-* and Homepage fields to debian/control[,.in}.
-  * Turn versioned Conflicts into Breaks to simplify lockstep upgrades.
-
-  [ Sebastian Dröge ]
-  * New upstream bugfix release:
-    + debian/build-deps.in:
-      - Build-depend on gst-plugins-base >= 1.2.1.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 09 Nov 2013 17:09:41 +0100
-
-gst-plugins-good1.0 (1.2.0-1) unstable; urgency=low
-
-  * New upstream stable release:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer and gst-plugins-base >= 1.2.0.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 24 Sep 2013 16:39:22 +0200
-
-gst-plugins-good1.0 (1.1.90-1) experimental; urgency=low
-
-  * New upstream release candidate:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer and gst-plugins-base >= 1.1.90.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 19 Sep 2013 12:47:00 +0200
-
-gst-plugins-good1.0 (1.1.4-1) experimental; urgency=low
-
-  * New upstream development snapshot:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer and gst-plugins-base >= 1.1.4.
-      - Build depend on libsoup >= 2.38.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 30 Aug 2013 12:53:44 +0200
-
-gst-plugins-good1.0 (1.1.3-1) experimental; urgency=low
-
-  * New upstream development snapshot:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer and gst-plugins-base >= 1.1.3.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 30 Jul 2013 08:46:19 +0200
-
-gst-plugins-good1.0 (1.1.2-1) experimental; urgency=low
-
-  * New upstream development snapshot:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer and gst-plugins-base >= 1.1.2.
-      - Build depend on orc >= 0.4.17.
-      - Build depend on pulseaudio >= 2.0.
-      - Build depend on libsoup2.4-dev instead of libsoup-gnome2.4-dev.
-      - Build depend on libjack-jackd2-dev instead of libjack-dev.
-    + debian/gstreamer-plugins-good.install,
-      debian/control.in:
-      - Add dtmf plugin which moved from gst-plugins-bad.
-      - Add newly ported cairo plugin.
-  * debian/patches/0001-souphttpsrc-ignore-errors-from-HEAD-request.patch:
-    + Patch from upstream GIT to ignore errors that happened as a result
-      of the HEAD request. Only error out later if the GET request fails.
-
- -- Sebastian Dröge <slomo@debian.org>  Sun, 14 Jul 2013 11:46:14 +0200
-
-gst-plugins-good1.0 (1.0.8-1) unstable; urgency=low
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 13 Jul 2013 11:32:13 +0200
-
-gst-plugins-good1.0 (1.0.7-1) unstable; urgency=low
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 26 Apr 2013 14:09:02 +0200
-
-gst-plugins-good1.0 (1.0.6-1) unstable; urgency=low
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 22 Mar 2013 18:16:56 +0100
-
-gst-plugins-good1.0 (1.0.5-1) unstable; urgency=low
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 08 Jan 2013 13:47:24 +0100
-
-gst-plugins-good1.0 (1.0.4-1) unstable; urgency=low
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 19 Dec 2012 10:31:27 +0100
-
-gst-plugins-good1.0 (1.0.3-1) unstable; urgency=low
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 21 Nov 2012 14:54:15 +0100
-
-gst-plugins-good1.0 (1.0.2-1) unstable; urgency=low
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 25 Oct 2012 13:33:47 +0200
-
-gst-plugins-good1.0 (1.0.1-1) unstable; urgency=low
-
-  * New upstream bugfix release.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 08 Oct 2012 10:49:02 +0200
-
-gst-plugins-good1.0 (1.0.0-1) unstable; urgency=low
-
-  * New upstream stable release:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer core/base >= 1.0.0.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 25 Sep 2012 00:19:31 +0200
-
-gst-plugins-good1.0 (0.11.99-1) experimental; urgency=low
-
-  * New upstream release:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer core/base >= 0.11.99.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 18 Sep 2012 09:38:33 +0200
-
-gst-plugins-good1.0 (0.11.94-1) experimental; urgency=low
-
-  * New upstream release:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer core/base >= 0.11.94.
-      - Build depend on gtk-doc >= 1.12.
-    + debian/gstreamer-plugins-good.install:
-      - Add gdkpixbuf plugin.
-    + debian/patches/0001-configure-Fix-GTK-required-version-variable-name.patch,
-      debian/patches/0002-configure-And-fix-the-GTK-check-to-use-the-correct-p.patch:
-      - Dropped, merged upstream.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 14 Sep 2012 10:15:48 +0200
-
-gst-plugins-good1.0 (0.11.93-1) experimental; urgency=low
-
-  * New upstream release:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer core/base >= 0.11.93.
-      - Build depend on GLib >= 2.32.
-      - Build depend on ORC >= 0.4.16.
-      - Build depend on libsoup >= 2.26.1.
-      - Build depend on GTK3 instead of GTK2.
-    + debian/gstreamer-plugins-good.install:
-      - Add the imagefreeze, interleave, deinterlace, monoscope,
-        smpte and wavpack plugins.
-    + debian/patches/0001-configure-Fix-GTK-required-version-variable-name.patch:
-      - Fix GTK configure check.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 09 Aug 2012 10:23:42 +0200
-
-gst-plugins-good1.0 (0.11.92-1) experimental; urgency=low
-
-  * New upstream release, "Money":
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer core/base >= 0.11.92.
-    + debian/gstreamer-plugins-good.install,
-      debian/build-deps.in:
-      - Remove annodex plugin.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 08 Jun 2012 12:25:20 +0200
-
-gst-plugins-good1.0 (0.11.91-1) experimental; urgency=low
-
-  * Build-depend on GLib > 2.31.14.
-  * New upstream release, "I smell the blood of an Englishman":
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on GStreamer core/base >= 0.11.91.
-    + debian/gstreamer-plugins-good.install:
-      - Ship some plugins again that were now ported.
-  * debian/build-deps.in:
-    + Update automake, autoconf and libtool build dependencies.
-  * debian/control.in,
-    debian/build-deps.in:
-    + Update debhelper dependency version and Standards-Version.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 21 May 2012 12:56:30 +0200
-
-gst-plugins-good1.0 (0.11.90-1) experimental; urgency=low
-
-  [ Olivier Naudan ]
-  * Imported Upstream version 0.11.90
-  * Imported debian/ from gst-plugins-good 0.10.30-1
-  * Updated debian/ for 0.11.90
-  * Removed -gconf package
-  * gstreamer-plugins-good.intall: Removed the plugins that are not ported or o
-
-  [ Sebastian Dröge ]
-  * Build-depend on libpng-dev instead of libpng12-dev.
-  * Update copyright.
-  * Remove GConf build dependency.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 02 May 2012 20:17:22 +0200
-
-gst-plugins-good0.10 (0.10.31-1) unstable; urgency=low
-
-  * New upstream release, "Faster":
-    + debian/rules,
-      debian/build-deps.in:
-      - (Build-) depend on GStreamer core/base >= 0.10.36.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 21 Feb 2012 10:45:15 +0100
-
-gst-plugins-good0.10 (0.10.30.3-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 06 Feb 2012 09:59:53 +0100
-
-gst-plugins-good0.10 (0.10.30.2-3) experimental; urgency=low
-
-  * debian/control.in:
-    + Build-depend on automake (>= 1.10), autoconf (>= 2.60) and
-      libtool (>= 2.0) to make dh-autoreconf actually work.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 14 Dec 2011 12:58:12 +0100
-
-gst-plugins-good0.10 (0.10.30.2-2) experimental; urgency=low
-
-  * debian/control.in:
-    + Depend on gstreamer0.10-pulseaudio | gstreamer0.10-audiosink
-      instead of only depending on the virtual package.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 12 Dec 2011 10:54:47 +0100
-
-gst-plugins-good0.10 (0.10.30.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build-depend on GStreamer core/base 0.10.35.2.
-      - Build-depend on PulseAudio 1.0.
-    + debian/patches/04_rtpgst722pay-compensate-for-clockrate.patch:
-      - Dropped, merged upstream.
-    + debian/patches/03_pulse-rank.patch:
-      - Dropped, merged upstream.
-    + debian/patches/99_ltmain_as-needed.patch:
-      - Refreshed to apply cleanly again.
-  * debian/control.in,
-    debian/build-deps.in:
-    + ACK NMU 0.10.30.2-2.1 and 0.10.30.2-2.2 (Closes: #646325, #633438).
-    + Correctly change control file from the last two NMUs.
-  * debian/build-deps.in,
-    debian/compat,
-    debian/control.in,
-    debian/gstreamer-gconf.install,
-    debian/gstreamer-plugins-good.install,
-    debian/gstreamer-pulseaudio.install,
-    debian/rules:
-    + Transition package to multi arch (Closes: #647486).
-      Patch taken from the Ubuntu package.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 12 Dec 2011 09:34:40 +0100
-
-gst-plugins-good0.10 (0.10.30-2.2) unstable; urgency=low
-
-  * Non-maintainer upload.
-  * Transition to libjpeg8 by build-depending against libjpeg-dev
-    (instead of libjpeg62-dev), closes: #633438
-
- -- Philipp Kaluza <debian@ghostroute.eu>  Sat, 03 Dec 2011 13:34:20 +0100
-
-gst-plugins-good0.10 (0.10.30-2.1) unstable; urgency=low
-
-  * Non-maintainer upload.
-  * Add Replaces/Breaks to gstreamer0.10-gconf for old 
-    gstreamer0.10-plugins-good (Closes: #646325)
-
- -- Philipp Kaluza <debian@ghostroute.eu>  Sat, 03 Dec 2011 10:34:02 +0000
-
-gst-plugins-good0.10 (0.10.30-2) unstable; urgency=low
-
-  [ Sebastian Dröge ]
-  * debian/control.in:
-    + Let gstreamer0.10-plugins-good depend on gstreamer0.10-gconf for
-      wheezy to guarantee correct upgrades to wheezy (Closes: #625567).
-
-  [ Sjoerd Simons ]
-  * debian/patches/04_rtpgst722pay-compensate-for-clockrate.patch:
-    + Correct clockrate vs. samplerate difference for G722. Fixes people
-      sounding like chipmunks on voip calls with G722 (From upstream git)
-
- -- Sjoerd Simons <sjoerd@debian.org>  Wed, 09 Nov 2011 14:20:22 +0000
-
-gst-plugins-good0.10 (0.10.30-1) unstable; urgency=low
-
-  * New upstream release, "Adagio":
-    + debian/patches/01_path-max.patch:
-      - Dropped, merged upstream.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 23 Jun 2011 09:44:29 +0200
-
-gst-plugins-good0.10 (0.10.29-2) unstable; urgency=low
-
-  * debian/patches/01_path-max.patch:
-    + Define PATH_MAX if it isn't defined, e.g. on GNU Hurd. Thanks
-      to Pino Toscano for the patch (Closes: #626698).
-  * debian/rules,
-    debian/gstreamer-plugins-good.install:
-    + Don't build the oss4 plugin on GNU Hurd, it does not compile
-      because of the way how ioctl() works there. Thanks to Pino
-      Toscano for the patch (Closes: #626698).
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 16 May 2011 09:10:14 +0200
-
-gst-plugins-good0.10 (0.10.29-1) unstable; urgency=low
-
-  * New upstream release, "Soft Cheese Enthusiast":
-    + debian/gstreamer-plugins-good.install:
-      - The quicktime plugin was renamed to isomp4 because
-        of trademark concerns.
-    + debian/rules,
-      debian/build-deps.in:
-      - Build-depend on GStreamer core/base 0.10.33.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 10 May 2011 15:52:01 +0200
-
-gst-plugins-good0.10 (0.10.28.3-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/gstreamer-plugins-good.install:
-      - The qtdemux plugin was renamed to quicktime because
-        it contains a muxer too now.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 27 Apr 2011 15:48:22 +0200
-
-gst-plugins-good0.10 (0.10.28.2-1) experimental; urgency=low
-
-  [ Alessandro Decina ]
-  * debian/build-deps.in:
-    + Add dependency on dh-autoreconf
-  * debian/rules:
-    + Include dh-autoreconf cdbs rule
-
-  [ Loïc Minier ]
-  * Use linux-any in build-deps instead of type-handling.
-  * Rework sed calls to avoid sed | sed.
-
-  [ Sebastian Dröge ]
-  * debian/control.in,
-    debian/build-deps.in,
-    debian/gstreamer-esd.install,
-    debian/rules:
-    + Drop ESD plugin, nothing is using it anymore, it is
-      unmaintained upstream and pulseaudio is a better 
-      replacement for it.
-  * New upstream pre-release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build-depend on GStreamer core/base >= 0.10.32.2.
-    + debian/build-deps.in:
-      - Build-depend on libcairo2-dev >= 1.10.0.
-    + debian/gstreamer-plugins-good.install,
-      debian/control.in:
-      - Add audioparsers plugin, which was moved from -bad
-        and Conflict with -bad << 0.10.21.2.
-
- -- Sebastian Dröge <slomo@debian.org>  Sun, 17 Apr 2011 10:55:39 +0200
-
-gst-plugins-good0.10 (0.10.28-3) unstable; urgency=low
-
-  * debian/control.in,
-    debian/rules,
-    debian/gstreamer-plugins-good.install,
-    debian/gstreamer-gconf.install:
-    + Split the GConf plugin into it's own package. GStreamer is used
-      as the default phonon backend nowadays and there's no reason
-      why KDE should depend on half of GNOME (Closes: #595651).
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 01 Apr 2011 10:13:13 +0200
-
-gst-plugins-good0.10 (0.10.28-2) unstable; urgency=low
-
-  * Upload to unstable.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 22 Mar 2011 15:06:25 +0100
-
-gst-plugins-good0.10 (0.10.28-1) experimental; urgency=low
-
-  * New upstream bugfix release, "Inconvenienced by the Solar System":
-    + Fixes build with kernels that have v4l2 support but not v4l support.
-
- -- Sebastian Dröge <slomo@debian.org>  Sun, 13 Mar 2011 13:03:07 +0100
-
-gst-plugins-good0.10 (0.10.27-1) experimental; urgency=low
-
-  * New upstream stable release, "Some Kind of Temporal Blend":
-    + debian/build-deps,
-      debian/rules:
-      - Require GStreamer, gst-plugins-base >= 0.10.32.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 22 Jan 2011 13:35:36 +0100
-
-gst-plugins-good0.10 (0.10.26.4-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/build-deps,
-      debian/rules:
-      - Require GStreamer, gst-plugins-base >= 0.10.31.4.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 19 Jan 2011 21:16:40 +0100
-
-gst-plugins-good0.10 (0.10.26.3-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/build-deps,
-      debian/rules:
-      - Require GStreamer, gst-plugins-base >= 0.10.31.3.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 13 Jan 2011 13:07:01 +0100
-
-gst-plugins-good0.10 (0.10.26.2-1) experimental; urgency=low
-
-  [ Sebastian Dröge ]
-  * New upstream pre-release:
-    + debian/control.in:
-      - Conflict/Replace gstreamer0.10-plugins-bad (<< 0.10.20.2) because
-        of the moved JACK plugin.
-    + debian/build-deps.in,
-      debian/gstreamer-plugins-good.install:
-      - Add the JACK plugin which was moved from gst-plugins-bad.
-    + debian/build-deps,
-      debian/rules:
-      - Require GStreamer, gst-plugins-base >= 0.10.31.2.
-      - Require GLib >= 2.22.
-
-  [ Emilio Pozuelo Monfort ]
-  * debian/build-deps.in,
-    debian/rules:
-    + Use dpkg-vendor instead of lsb_release.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 10 Jan 2011 15:11:27 +0100
-
-gst-plugins-good0.10 (0.10.26-1) experimental; urgency=low
-
-  * New upstream release, "Escapades".
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 02 Dec 2010 10:35:38 +0100
-
-gst-plugins-good0.10 (0.10.25.5-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 19 Nov 2010 11:30:21 +0100
-
-gst-plugins-good0.10 (0.10.25.4-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 01 Nov 2010 20:18:27 +0100
-
-gst-plugins-good0.10 (0.10.25.3-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 22 Oct 2010 19:58:54 +0200
-
-gst-plugins-good0.10 (0.10.25.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/patches/01_alphacolor-passthrough.patch,
-      debian/patches/02_qtdemux-eos-handling.patch,
-      debian/patches/04_qtdemux-eos-handling.patch:
-      - Dropped, merged upstream.
-    + debian/rules,
-      debian/build-deps.in:
-      - Require GStreamer core/plugins-base >= 0.10.30.2.
-      - Require ORC >= 0.4.11.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 16 Oct 2010 11:29:22 +0200
-
-gst-plugins-good0.10 (0.10.25-5) experimental; urgency=low
-
-  * debian/build-deps.in:
-    + Add the epoch to the orc build dependency to get dependencies
-      on the correct versions.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 17 Sep 2010 13:24:49 +0200
-
-gst-plugins-good0.10 (0.10.25-4) experimental; urgency=low
-
-  * debian/patches/02_qtdemux-eos-handling.patch:
-    + Another patch from upstream GIT to fix EOS handling in the
-      QT/MP4 demuxer even more.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 16 Sep 2010 11:18:01 +0200
-
-gst-plugins-good0.10 (0.10.25-3) experimental; urgency=low
-
-  * debian/patches/02_qtdemux-eos-handling.patch:
-    + Patch from upstream GIT to fix EOS handling in the QT/MP4 demuxer.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 15 Sep 2010 08:21:56 +0200
-
-gst-plugins-good0.10 (0.10.25-2) experimental; urgency=low
-
-  * debian/patches/01_alphacolor-passthrough.patch:
-    + Simple patch from upstream GIT to fix passthrough mode
-      of the alphacolor element.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 10 Sep 2010 11:40:40 +0200
-
-gst-plugins-good0.10 (0.10.25-1) experimental; urgency=low
-
-  * New upstream release, "Woe to You Oh Earth and Sea".
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 03 Sep 2010 12:36:18 +0200
-
-gst-plugins-good0.10 (0.10.24.5-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 25 Aug 2010 22:12:39 +0200
-
-gst-plugins-good0.10 (0.10.24.4-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 21 Aug 2010 21:59:12 +0200
-
-gst-plugins-good0.10 (0.10.24.3-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 11 Aug 2010 21:19:47 +0200
-
-gst-plugins-good0.10 (0.10.24.2-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 11 Aug 2010 09:12:22 +0200
-
-gst-plugins-good0.10 (0.10.24-1) unstable; urgency=low
-
-  * New upstream stable release, "Taking Liberties":
-    + debian/build-deps.in,
-      debian/rules:
-      - Build depend on GStreamer 0.10.30.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 15 Jul 2010 13:54:14 +0200
-
-gst-plugins-good0.10 (0.10.23.4-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 07 Jul 2010 15:42:43 +0200
-
-gst-plugins-good0.10 (0.10.23.3-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build depend on GStreamer 0.10.29.3.
-    + debian/patches/01_jpeg-libgstbase-linking.patch:
-      - Dropped, merged upstream.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 30 Jun 2010 10:43:51 +0200
-
-gst-plugins-good0.10 (0.10.23.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/rules,
-      debian/compat,
-      debian/control.in,
-      debian/source/format,
-      debian/patches/*:
-      - Update to debhelper compat level 7.
-      - Update to source format 3.0 (quilt).
-    + debian/build-deps.in,
-      debian/rules:
-      - Build depend on GLib 2.20 and GStreamer 0.10.29.2.
-      - Build depend on libraw1394 2.0.0.
-      - Build depend on ORC instead of liboil.
-    + debian/patches/02_pulsesink-reuse.patch,
-      debian/patches/04_theora_delivery_method.patch,
-      debian/patches/05_rtph264pay_short_startcodes.patch:
-      - Dropped, merged upstream.
-    + debian/patches/01_jpeg-libgstbase-linking.patch:
-      - Link the jpeg plugin with libgstbase to fix FTBFS.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 26 Jun 2010 21:38:03 +0200
-
-gst-plugins-good0.10 (0.10.23-4) unstable; urgency=low
-
-  * debian/patches/05_rtph264pay_short_startcodes.patch:
-    + Patch from upstream GIT to let rtph264 cope with the shorter
-      startcodes that are now used by by x264enc. This fixes interoperability
-      with Google Video and Nokia N900 among others.
-
- -- Sjoerd Simons <sjoerd@debian.org>  Fri, 04 Jun 2010 12:51:01 +0100
-
-gst-plugins-good0.10 (0.10.23-3) unstable; urgency=low
-
-  * debian/patches/02_pulsesink-reuse.patch:
-    + Patch from upstream GIT to fix reuse of pulsesink.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 02 Jun 2010 10:54:42 +0200
-
-gst-plugins-good0.10 (0.10.23-2) unstable; urgency=low
-
-  * debian/patches/04_theora_delivery_method.patch
-    + Added. Let the theora payloader advertise delivery-method in its caps.
-      Needed for backwards compatibility with older gstreamer/farsight
-      versions. (From Gnome bugzilla #618940)
-
- -- Sjoerd Simons <sjoerd@debian.org>  Mon, 31 May 2010 22:31:06 +0100
-
-gst-plugins-good0.10 (0.10.23-1) unstable; urgency=low
-
-  * New upstream release, "Stylish Kids in Riot".
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 31 May 2010 05:42:46 +0200
-
-gst-plugins-good0.10 (0.10.22.3-1) unstable; urgency=low
-
-  * New upstream pre-release:
-    + debian/patches/*:
-      - Drop all VP8/WebM patches and other patches that
-        are upstream now.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 26 May 2010 15:34:01 +0200
-
-gst-plugins-good0.10 (0.10.22.2-3) unstable; urgency=low
-
-  * Upload to unstable.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 20 May 2010 13:55:29 +0200
-
-gst-plugins-good0.10 (0.10.22.2-2) experimental; urgency=low
-
-  * debian/patches/00*:
-    + Add support for VP8 in the AVI, Matroska and QT/MP4 plugins
-      and fix some Matroska issues.
-  * debian/patches/04-pulse-0001-pulse-Don-t-lock-the-mainloop-in-NULL.patch:
-    + Don't try to use a NULL pulse mainloop.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 18 May 2010 20:59:55 +0200
-
-gst-plugins-good0.10 (0.10.22.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/gstreamer-plugins-good.install,
-      debian/control.in:
-      - Ship the imagefreeze and oss4audio plugins here, they were
-        moved from gstreamer0.10-plugins-bad.
-      - Add conflicts for gstreamer0.10-plugins-bad because of the
-        moved capssetter element.
-  * debian/patches/01_efence-configure-check.patch:
-    + Fix configure check for efence.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 15 May 2010 09:55:08 +0200
-
-gst-plugins-good0.10 (0.10.22-1) unstable; urgency=low
-
-  * New upstream release, "Square One":
-    + debian/build-deps.in,
-      debian/rules:
-      - Build depend on GStreamer core/base >= 0.10.29.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 28 Apr 2010 09:44:17 +0200
-
-gst-plugins-good0.10 (0.10.21.3-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 26 Apr 2010 08:01:09 +0200
-
-gst-plugins-good0.10 (0.10.21.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Build depend on GStreamer core/base >= 0.10.28.2.
-  * debian/build-deps.in,
-    debian/control.in:
-    + (Build-) depend on GStreamer core/base documentation to get
-      documentation cross references right.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 15 Apr 2010 13:56:53 +0200
-
-gst-plugins-good0.10 (0.10.21-1) unstable; urgency=low
-
-  * New upstream stable release, "Lemons".
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 09 Mar 2010 09:48:28 +0000
-
-gst-plugins-good0.10 (0.10.19-1) unstable; urgency=low
-
-  * New upstream stable release, "Closer to the Edit":
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on gstreamer and gst-plugins-base >= 0.10.27.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 08 Mar 2010 10:01:27 +0000
-
-gst-plugins-good0.10 (0.10.18.3-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on gstreamer and gst-plugins-base >= 0.10.26.3.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 25 Feb 2010 08:27:57 +0100
-
-gst-plugins-good0.10 (0.10.18.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/gstreamer-plugins-good.install,
-      debian/control.in:
-      - Add shapewipe plugin, which moved from gst-plugins-bad. Also
-        add Replaces for gst-plugins-bad << 0.10.17.2.
-    + debian/build-deps.in:
-      - Build depend on gst-plugins-base 0.10.26.2.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 19 Feb 2010 13:51:58 +0100
-
-gst-plugins-good0.10 (0.10.18-1) unstable; urgency=low
-
-  * New upstream release, "Short Circuit":
-    + debian/rules,
-      debian/build-deps.in:
-      - Update GStreamer and gst-plugins-base build dependencies to >= 0.10.26.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 11 Feb 2010 10:31:48 +0100
-
-gst-plugins-good0.10 (0.10.17.3-1) experimental; urgency=low
-
-  * debian/build-deps.in,
-    debian/gstreamer-plugins-good.install:
-    + Remove HAL plugin, HAL will most probably be dropped soon and
-      nobody uses this plugin anymore.
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 05 Feb 2010 10:10:51 +0100
-
-gst-plugins-good0.10 (0.10.17.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/rules,
-      debian/control.in:
-      - Build depend on GStreamer 0.10.25.2, gst-plugins-base 0.10.25.2
-        and GLib 2.18.
-    + Fixes demuxing of some MOV files (Closes: #561227).
-    + Fixes FTBFS with gcc 4.5 (Closes: #564998).
-  * debian/control.in:
-    + Fix typo in package description (Closes: #557368).
-    + Remove David I. Lehn from Uploaders (Closes: #557285).
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 27 Jan 2010 07:56:17 +0100
-
-gst-plugins-good0.10 (0.10.17-1) unstable; urgency=low
-
-  * debian/build-deps.in:
-    + Build depend on pulseaudio >= 0.9.20 for additional
-      features.
-  * New upstream release, "They used to sparkle".
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 17 Nov 2009 09:17:35 +0100
-
-gst-plugins-good0.10 (0.10.16.3-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 13 Nov 2009 07:58:08 +0100
-
-gst-plugins-good0.10 (0.10.16.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/patches/00*pulse*.patch,
-      debian/patches/00*equalizer*.patch,
-      debian/patches/04_oss-rank.patch:
-      - Dropped, merged upstream.
-    + debian/build-deps.in,
-      debian/rules:
-      - Update build dependencies.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 10 Nov 2009 10:28:49 +0100
-
-gst-plugins-good0.10 (0.10.16-5) unstable; urgency=low
-
-  * debian/patches/0021-pulsesink-Only-set-the-volume-on-stream-connection-i.patch:
-    + Only set the volume on stream connection if pulse >= 0.9.20 is available,
-      this prevents weird volume changes in totem.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 30 Oct 2009 10:33:31 +0100
-
-gst-plugins-good0.10 (0.10.16-4) unstable; urgency=low
-
-  * debian/patches/000{1,2}-equalizer*.patch:
-    + Patches from upstream GIT to fix equalizer in stereo mode and
-      to use better filters for the first and last band.
-  * debian/patches/00[1-20]-pulse*.patch:
-    + Patches from upstream GIT to improve PulseAudio plugin and fix
-      some major issues, like decreasing the volume after every track
-      in some cases.
-
- -- Sebastian Dröge <slomo@debian.org>  Sun, 18 Oct 2009 14:00:56 +0200
-
-gst-plugins-good0.10 (0.10.16-3) unstable; urgency=low
-
-  * debian/patches/04_oss-rank.patch:
-    + Downgrade the rank of osssrc to secondary
-  * debian/rules: Change default audio input to autoaudiosrc
-
- -- Sjoerd Simons <sjoerd@debian.org>  Wed, 07 Oct 2009 22:33:02 +0100
-
-gst-plugins-good0.10 (0.10.16-2) unstable; urgency=low
-
-  * debian/rules:
-    + Use libgudev on Linux for v4l2 device detection.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 30 Sep 2009 08:26:07 +0200
-
-gst-plugins-good0.10 (0.10.16-1) unstable; urgency=low
-
-  * New upstream release, 'Secret Handshakes'.
-
- -- Sebastian Dröge <slomo@debian.org>  Sun, 30 Aug 2009 11:02:26 +0200
-
-gst-plugins-good0.10 (0.10.15.5-1) experimental; urgency=low
-
-  * New upstream pre-release.
-  * debian/control.in:
-    + Update Standards-version to 3.8.3, no additional changes needed.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 26 Aug 2009 17:39:36 +0200
-
-gst-plugins-good0.10 (0.10.15.3-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 17 Aug 2009 08:11:59 +0200
-
-gst-plugins-good0.10 (0.10.15.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/build-deps.in,
-      debian/rules:
-      - Update build dependencies.
-    + debian/control.in,
-      debian/gstreamer-plugins-good.install:
-      - Add the rtpmanager plugin which was moved from gst-plugins-bad.
-        For this also add Replaces for gst-plugins-bad << 0.10.13.2.
-    + debian/patches/01_equalizer-integer-arithmetic-distortions.patch,
-      debian/patches/02_SA35205-pngdec-integer-overflow.patch:
-      - Dropped, merged upstream.
-  * debian/control.in:
-    + Update Standards-version to 3.8.2, no additional changes needed.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 12 Aug 2009 07:13:08 +0200
-
-gst-plugins-good0.10 (0.10.15-2) unstable; urgency=high
-
-  * debian/patches/01_equalizer-integer-arithmetic-distortions.patch:
-    + Patch from upstream GIT to fix distortions when the integer
-      arithmetic mode of the equalizer is used.
-  * debian/patches/02_SA35205-pngdec-integer-overflow.patch:
-    + SECURITY: SA35205 - PNG Processing Integer Overflow Vulnerability
-      Patch from upstream GIT to fix an integer overflow in pngdec:
-      A malformed (or simply huge) PNG file can lead to integer overflow in
-      calculating the size of the output buffer, leading to crashes or buffer
-      overflows later (Closes: #531631).
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 03 Jun 2009 08:22:36 +0200
-
-gst-plugins-good0.10 (0.10.15-1) unstable; urgency=low
-
-  * New upstream release, 'I've been up all night'.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 20 May 2009 23:19:36 +0200
-
-gst-plugins-good0.10 (0.10.14.3-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + Fixes regression in AVI seeking (Closes: #528813).
-    + debian/patches/01_rtp-libm-linking.patch:
-      - Dropped, merged upstream.
-    + debian/gstreamer-plugins-good.install,
-      debian/control.in:
-      - Add the flv, deinterlace and y4menc plugins that
-        were moved from gst-plugins-bad.
-  * debian/control.in:
-    + Change section of the debug package to debug and add ${misc:Depends}
-      to it's dependencies.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 16 May 2009 11:28:14 +0200
-
-gst-plugins-good0.10 (0.10.14.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/patches/01_gconf-notifications.patch:
-      - Dropped, merged upstream.
-    + debian/rules,
-      debian/build-deps.in:
-      - Updated build dependencies.
-    + debian/patches/01_rtp-libm-linking.patch:
-      - Link with -lm to fix unresolved symbols.
-  * debian/control.in:
-    + Update Standards-version to 3.8.1, no additional changes needed.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 12 May 2009 08:59:05 +0200
-
-gst-plugins-good0.10 (0.10.14-2) unstable; urgency=low
-
-  * Upload to unstable.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 06 Mar 2009 23:41:50 +0100
-
-gst-plugins-good0.10 (0.10.14-1) experimental; urgency=low
-
-  * New upstream release, 'Disaffected Affectation'.
-  * debian/patches/02_no-Werror.patch,
-    debian/rules:
-    + Pass -Wno-error via C(XX)FLAGS instead of patching configure.
-  * debian/patches/01_gconf-notifications.patch:
-    + Disconnect GConf notifications after usage, patch from upstream GIT.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 20 Feb 2009 10:31:38 +0100
-
-gst-plugins-good0.10 (0.10.13.3-1) experimental; urgency=low
-
-  * debian/build-deps.in:
-    + Build depend on gstreamer0.10-plugins-base 0.10.22 for the
-      new videotestsrc colors to fix the videocrop unit test.
-  * debian/gstreamer-plugins-good.install:
-    + Include the new equalizer presets.
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 16 Feb 2009 15:30:35 +0100
-
-gst-plugins-good0.10 (0.10.13.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/patches/04_equalizer-coefficients.patch,
-      debian/patches/05_soup-live-source.patch,
-      debian/patches/06_libv4l.patch,
-      debian/patches/07_pulse-hang-and-thread-leak.patch,
-      debian/patches/99_autoreconf.patch:
-      - Dropped, merged upstream.
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on gstreamer and gst-plugins-base 0.10.22.
-      - Build depend on pulseaudio 0.9.13 to enable some optional
-        features in the pulse plugin.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 07 Feb 2009 20:36:03 +0100
-
-gst-plugins-good0.10 (0.10.13-2) experimental; urgency=low
-
-  * debian/patches/07_pulse-hang-and-thread-leak.patch:
-    + Patches from upstream GIT to fix some deadlocks when
-      the pulseaudio daemon disappears and also fix
-      a memory leak.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 26 Jan 2009 15:41:46 +0100
-
-gst-plugins-good0.10 (0.10.13-1) experimental; urgency=low
-
-  * New upstream security release, 'Blatant Discouragement':
-    + Fix potential buffer overflows while reading quicktime headers.
-      Security issue noticed by Tobias Klein (TKADV2009-0xx).
-    + debian/patches/99_autoreconf.patch:
-      - Updated for the new release.
-  * debian/build-deps.in:
-    + Build depend on libcairo2-dev instead of the virtual package
-      libcairo-dev.
-  * -
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 26 Jan 2009 15:41:45 +0100
-
-gst-plugins-good0.10 (0.10.11-2) experimental; urgency=low
-
-  * debian/patches/06_libv4l.patch,
-    debian/patches/99_autoreconf.patch,
-    debian/rules:
-    + Patch from upstream CVS to use libv4l for the v4l2 plugin instead
-      of direct access to the v4l device. This adds support for a lot
-      more v4l2 devices.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 05 Nov 2008 12:38:36 +0100
-
-gst-plugins-good0.10 (0.10.11-1) experimental; urgency=low
-
-  * New upstream release, 'Secondary Consideration'.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 25 Oct 2008 09:39:23 +0200
-
-gst-plugins-good0.10 (0.10.10.4-1) experimental; urgency=low
-
-  [ Loic Minier ]
-  * Set gstreamer0.10-pulseaudio's Section to sound to match overrides.
-
-  [ Sebastian Dröge ]
-  * New upstream pre-release.
-  * debian/patches/04_equalizer-coefficients.patch:
-    + Patch from upstream bugtracker to not recalculate the equalizer
-      coefficients for every single buffer but only when it's needed.
-  * debian/patches/05_soup-live-source.patch:
-    + Patch from upstream bugtracker to allow souphttpsrc to work
-      as live source and have it provide timestamps.
-
- -- Sebastian Dröge <slomo@debian.org>  Wed, 22 Oct 2008 11:08:03 +0200
-
-gst-plugins-good0.10 (0.10.10.3-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 18 Oct 2008 10:23:40 +0200
-
-gst-plugins-good0.10 (0.10.10.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/rules,
-      debian/build-deps.in:
-      - Build depend on gstreamer and gst-plugins-base >= 0.10.21.
-    + debian/build-deps.in:
-      - Build depend on FLAC >= 1.1.3.
-      - Build depend on bzip2.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 11 Oct 2008 15:42:49 +0200
-
-gst-plugins-good0.10 (0.10.10-1) experimental; urgency=low
-
-  * New upstream release, 'Barely Moving'.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 28 Aug 2008 10:29:42 +0200
-
-gst-plugins-good0.10 (0.10.9.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/build-deps.in,
-      debian/gstreamer-plugins-good.install:
-      - Remove the cdio plugin, it moved to gst-plugins-ugly because libcdio
-        is GPL licensed.
-  * debian/rules:
-    + Build depend on gstreamer >= 0.10.20-3 for the new virtual package
-      names.
-  * debian/control.in:
-    + Wrap control fields.
-    + Depend on gstreamer0.10-plugins-base as some plugins need it.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 15 Aug 2008 09:28:10 +0200
-
-gst-plugins-good0.10 (0.10.9-2) experimental; urgency=low
-
-  * debian/control.in,
-    debian/rules:
-    + Use new automatic codec installation infrastructure.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 09 Aug 2008 16:56:46 +0200
-
-gst-plugins-good0.10 (0.10.9-1) experimental; urgency=low
-
-  * New upstream release, 'Steam Train Rolling'.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 01 Aug 2008 11:32:53 +0200
-
-gst-plugins-good0.10 (0.10.8.4-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 29 Jul 2008 12:01:45 +0200
-
-gst-plugins-good0.10 (0.10.8.3-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 26 Jul 2008 12:34:57 +0200
-
-gst-plugins-good0.10 (0.10.8.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/patches/10_speex_caps.patch,
-      debian/patches/11_rtsp_fdleak.patch,
-      debian/patches/12_matroskamux_track_duration.patch,
-      debian/patches/13_equalizer.patch:
-      - Dropped, merged upstream.
-    + debian/build-deps.in,
-      debian/control.in,
-      debian/gstreamer-pulseaudio.install,
-      debian/rules:
-      - Add the pulseaudio plugin.
-    + debian/gstreamer-plugins-good.install,
-      debian/control.in:
-      - Add the interleave and replaygain plugins.
-    + debian/build-deps.in,
-      debian/rules:
-      - Update gstreamer, gst-plugins-base and libcdio build dependencies.
-  * debian/control.in:
-    + Depend on gstreamer0.10-audiosink instead of a specific audiosink
-      plugin (Closes: #482796).
-  * debian/patches/03_pulse-rank.patch:
-    + Update the rank of the pulse elements to PRIMARY+10.
-  * debian/control.in:
-    + Update Standards-version to 3.8.0, no additional changes needed.
-
- -- Sebastian Dröge <slomo@debian.org>  Sun, 20 Jul 2008 11:59:00 +0200
-
-gst-plugins-good0.10 (0.10.8-4) unstable; urgency=low
-
-  * debian/patches/13_equalizer.patch:
-    + Fix clipping in integer mode, correctly implement passthrough mode if
-      all bands have a gain of 0dB and delay filter coefficient calculation
-      until they're really needed. Patch from upstream CVS.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 02 Jun 2008 13:44:41 +0200
-
-gst-plugins-good0.10 (0.10.8-3) unstable; urgency=low
-
-  * debian/patches/11_rtsp_fdleak.patch
-    - Added. Fix filedescriptor leak on errors. (From upstream CVS)
-  * debian/patches/12_matroskamux_track_duration.patch
-    - Added. Fix track time calculation when muxing matroska files (From
-      upstream CVS)
-
- -- Sjoerd Simons <sjoerd@debian.org>  Sun, 01 Jun 2008 16:15:48 +0200
-
-gst-plugins-good0.10 (0.10.8-2) unstable; urgency=low
-
-  * debian/patches/10_speex_caps.patch
-    - Added. Fix speexenc and rtpspeexpay caps negotiation (From gnome
-    bugzilla #465146)
-
- -- Sjoerd Simons <sjoerd@debian.org>  Fri, 25 Apr 2008 21:51:20 +0200
-
-gst-plugins-good0.10 (0.10.8-1) unstable; urgency=low
-
-  * New upstream bugfix release, 'One For The Money'.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 24 Apr 2008 07:41:30 +0200
-
-gst-plugins-good0.10 (0.10.7.4-1) experimental; urgency=low
-
-  * New upstream pre-release.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 22 Apr 2008 10:28:29 +0200
-
-gst-plugins-good0.10 (0.10.7.3-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/patches/01_goom-missing-header.patch:
-      - Dropped, merged upstream.
-    + debian/build-deps.in:
-      - flex and bison are not necessary anymore.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 18 Apr 2008 10:35:19 +0200
-
-gst-plugins-good0.10 (0.10.7.2-2) experimental; urgency=low
-
-  * debian/patches/02_no-Werror.patch:
-    + Don't build with -Werror to fix FTBFS on some architectures.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 15 Apr 2008 05:29:28 +0200
-
-gst-plugins-good0.10 (0.10.7.2-1) experimental; urgency=low
-
-  * New upstream pre-release:
-    + debian/control.in:
-      - Adjust conflicts for gst-plugins-bad because of moved plugins.
-    + debian/rules,
-      debian/build-deps.in:
-      - Update build dependencies.
-    + debian/gstreamer-plugins-good.install:
-      - Ship soup and goom2k1 plugins.
-    + debian/rules:
-      - Set default audio/video sinks/srcs depending on the platform.
-    + debian/patches/02_v4l2_default.patch,
-      debian/patches/05_speexenc_double_unref.patch,
-      debian/patches/75_build_docs_without_python_xml.patch,
-      debian/patches/80_unit-tests.patch:
-      - Dropped, merged upstream.
-    + debian/patches/01_goom-missing-header.patch:
-      - Add missing header file that was forgotten.
-
- -- Sebastian Dröge <slomo@debian.org>  Mon, 14 Apr 2008 10:59:00 +0200
-
-gst-plugins-good0.10 (0.10.7-3) unstable; urgency=low
-
-  * debian/patches/05_speexenc_double_unref.patch:
-    + Added. Don't unref a buffer twice when hitting a not-negotiated error
-    in speexenc (from upstream CVS) (Closes: #472096)
-
- -- Sjoerd Simons <sjoerd@debian.org>  Sat, 22 Mar 2008 02:35:15 +0100
-
-gst-plugins-good0.10 (0.10.7-2) unstable; urgency=low
-
-  * debian/patches/02_v4l2_default.patch:
-    + Patch by Mario Limonciello to use v4l2 as default video source instead
-      of the nowadays deprecated v4l (Closes: #468073).
-  * debian/patches/75_build_docs_without_python_xml.patch,
-    debian/build-deps.in:
-    Stop using pyxml for building the docs (Closes: #468630).
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 11 Mar 2008 05:14:10 +0100
-
-gst-plugins-good0.10 (0.10.7-1) unstable; urgency=low
-
-  * New upstream release, "Red Door Black":
-    + debian/patches/01_linking-fixes.patch:
-      - Dropped, merged upstream.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 21 Feb 2008 10:48:23 +0100
-
-gst-plugins-good0.10 (0.10.6.4-1) experimental; urgency=low
-
-  * New upstream pre-release.
-  * debian/patches/99_ltmain_as-needed.patch,
-    debian/rules:
-    + Add -Wl,-z,defs -Wl,-O1 -Wl,--as-needed to LDFLAGS to remove some
-      unnecessary dependencies on various packages.
-  * debian/patches/01_linking-fixes.patch:
-    + Link gstalpha with libgstbase.
-  * debian/build-deps.in:
-    + Build depend on libxv-dev to get Xv support in ximagsink.
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 19 Feb 2008 06:54:55 +0100
-
-gst-plugins-good0.10 (0.10.6.3-1) experimental; urgency=low
-
-  * New upstream pre-release.
-  * debian/build-deps.in:
-    + Build depend on gstreamer0.10-plugins-base for the unit tests.
-  * debian/patches/80_unit-tests.patch:
-    + Disable gconfaudiosrc for the generic/states unit test.
-
- -- Sebastian Dröge <slomo@debian.org>  Thu, 14 Feb 2008 13:14:55 +0100
-
-gst-plugins-good0.10 (0.10.6.2-1) experimental; urgency=low
-
-  [ Loic Minier ]
-  * Bump up type-handling build-dep to >= 0.2.14 and call it with  two
-    arguments again.
-
-  [ Emilio Pozuelo Monfort ]
-  * debian/rules:
-    - Decide the package name and url depending on the distribution.
-  * debian/build-deps.in:
-    - Build-Depend on lsb-release.
-
-  [ Sebastian Dröge ]
-  * New upstream pre-release:
-    + Fixes FTBFS if built twice in a row (Closes: #424398).
-    + Fixes playback of realaudio streams (Closes: #430364).
-    + Fixes switching of sink after song changes (Closes: #444769).
-    + debian/gstreamer-plugins-good.install:
-      - Add new equalizer, spectrum and multifile plugins and sort
-        alphabetically.
-    + debian/build-deps.in,
-      debian/rules:
-      - Update liboil and gstreamer build dependencies.
-    + debian/patches/20_gconf-state-change.patch,
-      debian/patches/30_id3_gst_tag_defines.patch:
-      - Dropped, merged upstream.
-    + debian/control.in:
-      - Update Replaces on gst-plugins-bad for the plugin moves.
-      - Update Standards-Version to 3.7.3, no additional changes needed.
-  * debian/rules:
-    + Run the unit test suite but don't fail the build on failures.
-
- -- Sebastian Dröge <slomo@debian.org>  Sat, 09 Feb 2008 12:11:21 +0100
-
-gst-plugins-good0.10 (0.10.6-4) unstable; urgency=low
-
-  * debian/patches/30_id3_gst_tag_defines.patch:
-    + Added. Use GST_TAG_ARTIST_SORTNAME instead of the deprecated
-      GST_TAG_MUSICBRAINZ_SORTNAME (Closes: #452671)
-    + Also add support for GST_TAG_ALBUM_SORTNAME, GST_TAG_TITLE_SORTNAME and
-      GST_TAG_COMPOSER
-    + Based on the current CVS version of gstid3v2mux
-
- -- Sjoerd Simons <sjoerd@debian.org>  Sat, 24 Nov 2007 22:07:19 +0100
-
-gst-plugins-good0.10 (0.10.6-3) unstable; urgency=low
-
-  * debian/rules:
-    + Set GST_REGISTRY before the dh_gstscancodecs call to save the registry
-      somewhere on buildds without writable home and speed things up a bit.
-  * debian/build-deps.in:
-    + Remove check from build dependencies. This is only an indirect build
-      dependency that is already satisfied by libgstreamer0.10-dev. configure
-      only checks for libgstcheck, not check.
-  * debian/patches/20_gconf-state-change.patch:
-    + Fix errors while changing the state of the gconf sink. Patch from
-      upstream CVS, see http://bugzilla.gnome.org/show_bug.cgi?id=471364 .
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 25 Sep 2007 15:31:31 +0200
-
-gst-plugins-good0.10 (0.10.6-2) unstable; urgency=low
-
-  * debian/control.in:
-    + Add Replaces on gstreamer0.10-plugins-really-bad (<< 0.10.4.2), which is
-      maintained in the Debian Multimedia project and also contained the
-      WavPack plugin.
-  * debian/build-deps.in,
-    debian/rules:
-    + Call dh_gstinstallcodecs to generate the codecs database.
-  * debian/gstreamer-plugins-good.install,
-    debian/gstreamer-plugins-good-doc.install,
-    debian/control.in:
-    + Move translations from the docs package to the plugin package.
-
- -- Sebastian Dröge <slomo@debian.org>  Fri, 31 Aug 2007 09:27:06 +0200
-
-gst-plugins-good0.10 (0.10.6-1) unstable; urgency=low
-
-  * New upstream release, "Wobble Board":
-    + Fixes muxing of raw audio in Matroska files (Closes: #360536).
-    + Fixes memory leak in cutter and level plugins (Closes: #425114).
-    + debian/patches/20_gstavidemux-error-out-on-pull_range.patch,
-      debian/patches/30_speex-rtp-fixes.patch,
-      debian/patches/40_flac1.1.3.patch,
-      debian/patches/99_autoreconf.patch:
-      - Dropped, merged upstream.
-    + debian/build-deps.in,
-      debian/rules:
-      - Require gstreamer and gst-plugins-base >= 0.10.13.
-    + debian/gstreamer-plugins-good.install,
-      debian/build-deps.in,
-      debian/control.in:
-      - Add wavpack, qtdemux, videocrop, monoscope and gamma plugins.
-        For this add Replaces on gstreamer0.10-plugins-bad (<< 0.10.4.2).
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 19 Jun 2007 19:28:52 +0200
-
-gst-plugins-good0.10 (0.10.5-7) unstable; urgency=low
-
-  * debian/control.in:
-    + Use ${binary:Version} instead of ${Source-Version} to make lintian happy.
-  * debian/patches/40_flac1.1.3.patch:
-    + Patch from upstream CVS to work with flac >= 1.1.3. (Closes: #427744, #426647).
-      http://bugzilla.gnome.org/show_bug.cgi?id=385887
-  * debian/patches/99_autoreconf.patch:
-    + Regenerate configure for the above change.
-
- -- Sebastian Dröge <slomo@debian.org>  Sun, 10 Jun 2007 22:58:34 +0200
-
-gst-plugins-good0.10 (0.10.5-6) unstable; urgency=low
-
-  * debian/patches/30_speex-rtp-fixes.patch
-    + Added. Fix the speex rtp payloader and depayloader. (From upstream CVS)
-
- -- Sjoerd Simons <sjoerd@debian.org>  Thu, 10 May 2007 13:27:36 +0200
-
-gst-plugins-good0.10 (0.10.5-5) unstable; urgency=low
-
-  * Upload to unstable
-  * Merge experimental branch:
-    [ Loic Minier ]
-    + Build-depend on libpng12-dev instead of libpng12-0-dev to get the
-      libpng12.pc file.
-
-    [ Sebastian Dröge ]
-    + New upstream release 0.10.5, "The Path of Thorns":
-      - Fixes playback of some internet radio streams (Closes: #384377)
-      - debian/patches/12_gstcacasink-header-include.patch,
-        debian/patches/13_separate-handle-for-avc-ops.patch:
-        . Dropped, merged upstream
-      - debian/rules,
-      - debian/build-deps.in:
-        . Build depend on gstreamer / gst-plugins-base >= 0.10.10.1
-      - debian/gstreamer-plugins-good.install:
-        . Add audiofx plugin
-    + debian/patches/11_esdsink-priority.patch:
-      - Dropped, priorities are cached in the gst registry, thus this patch had
-        almost no effect. This should somehow be solved by a determined priority
-        order for sinks
-    + debian/control:
-      - Updated to use my debian.org mail address
-    + debian/control,
-      debian/gstreamer-plugins-good.install:
-      - Only build the video4linux2 plugin on Linux. Fixes FTBFS everywhere else
-    + debian/build-deps.in,
-      debian/rules:
-      - Use type-handling to only depend on libraw1394 and friends on Linux
- 
-    [ Sjoerd Simons ]
-    + Enable experimental plugins (the v4l2src plugin)
-    + Conflict with gstreamer0.10-plugins-bad < 0.10.4 which used to provide the
-      v4l2src plugin.
-    + Add myself to uploaders
-
-  * debian/patches/20_gstavidemux-error-out-on-pull_range.patch:
-    + Updated for the new upstream version
-
- -- Sebastian Dröge <slomo@debian.org>  Tue, 10 Apr 2007 20:34:53 +0200
-
-gst-plugins-good0.10 (0.10.4-3) unstable; urgency=high
-
-  * New patch, 13_separate-handle-for-avc-ops, to use a separate handle on
-    raw1394 for AVC operations.
-  * Urgency high as the dv plugin is unusable without this patch.
-  * Merge 0.10.4-2.
-
- -- Loic Minier <lool@dooz.org>  Wed, 25 Oct 2006 16:07:07 +0200
-
-gst-plugins-good0.10 (0.10.4-2) experimental; urgency=low
-
-  * Re-add -dbg package and target at experimental.
-
- -- Loic Minier <lool@dooz.org>  Fri, 13 Oct 2006 12:27:45 +0200
-
-gst-plugins-good0.10 (0.10.4-1) unstable; urgency=low
-
-  [ Loic Minier ]
-  * New patch, 11_esdsink-priority, taken from Ubuntu to include esdsink in
-    the candidates of autoaudiosink. (Closes: #373703)
-
-  [ Sebastian Dröge ]
-  * New upstream release, "Dear Leader".
-    - Fixes reading and parsing of some id3v2 tags. (Closes: #361310)
-    - Tries esdsink but does not autospawn esound. (Closes: #361841)
-    - Fixes crash of dv1394src by using a separate handle for AVC operations.
-      (Closes: #369936)
-    - debian/patches/10_fix-h263-caps.patch:
-      + dropped, merged upstream
-    - debian/patches/11_esdsink-priority.patch:
-      + Updated, partially upstream
-    - debian/rules:
-      + Require libraw1394-dev (>= 1.2.1) and libiec61883-dev (>= 1.0.0)
-  * debian/control.in:
-    + Added myself to Uploaders
-  * debian/gstreamer-plugins-good.install:
-    + Remove the duplicated entries for the dv1394 element
-  * debian/compat,
-    debian/build-deps.in:
-    + Update to debhelper compat level 5
-  * debian/rules,
-    debian/control.in:
-    + Add a -dbg package
-
-  [ Loic Minier ]
-  * Rename patch 11_gstcacasink-header-include to
-    12_gstcacasink-header-include.
-  * Drop -dbg package for now, this version is for etch.
-
- -- Loic Minier <lool@dooz.org>  Fri, 13 Oct 2006 12:13:08 +0200
-
-gst-plugins-good0.10 (0.10.3-3) unstable; urgency=medium
-
-  * New patch, 11_gstcacasink-header-include, to fix building of the libcaca
-    plugin; thanks Sam Hocevar. (Closes: #386169)
-
- -- Loic Minier <lool@dooz.org>  Sat,  9 Sep 2006 20:32:43 +0200
-
-gst-plugins-good0.10 (0.10.3-2) unstable; urgency=low
-
-  * Bump up Standards-Version to 3.7.2.
-    [debian/control, debian/control.in]
-  * New patch from upstream to fix caps of H263 RTP streams, thanks Paul van
-    Tilburg.
-    [debian/patches/10_fix-h263-caps.patch]
-  * Export OIL_CPU_FLAGS=0 for commands launched during the build process as
-    it can cause build failures on buildds with specific hardware at build
-    time.
-    [debian/rules]
-
- -- Loic Minier <lool@dooz.org>  Wed, 17 May 2006 23:05:56 +0200
-
-gst-plugins-good0.10 (0.10.3-1) unstable; urgency=low
-
-  * New upstream release, "Desplazado".
-    - Bump libgstreamer0.10-dev build-dep to 0.10.4.1.
-      [debian/control, debian/rules]
-    - Bump libgstreamer-plugins-base0.10-dev build-dep to 0.10.5.1.
-      [debian/build-deps.in, debian/build-deps, debian/control]
-    - New ximagesrc plugin.
-      . Add libxdamage-dev, libxext-dev, and libxfixes-dev build-deps.
-        [debian/build-deps.in, debian/build-deps, debian/control]
-      . Install in gstreamer-plugins-good.
-        [debian/gstreamer-plugins-good.install]
-    - New annodex plugin.
-      . Add libxml2-dev build-dep.
-        [debian/build-deps.in, debian/build-deps, debian/control]
-      . Install in gstreamer-plugins-good.
-        [debian/gstreamer-plugins-good.install]
-    - New gdkpixbuf plugin.
-      . Add libgtk2.0-dev build-dep.
-        [debian/build-deps.in, debian/build-deps, debian/control]
-      . Install in gstreamer-plugins-good.
-        [debian/gstreamer-plugins-good.install]
-    - New halelements plugin.
-      . Add libdbus-1-dev (>= 0.32) and libhal-dev (>= 0.5.6) build-deps.
-        [debian/build-deps.in, debian/build-deps, debian/control]
-      . Install in gstreamer-plugins-good.
-        [debian/gstreamer-plugins-good.install]
-    - New taglib plugin.
-      . Add libtag1-dev build-dep.
-        [debian/build-deps.in, debian/build-deps, debian/control]
-      . Install in gstreamer-plugins-good.
-        [debian/gstreamer-plugins-good.install]
-    - New videobalance plugin, installed in gstreamer-plugins-good.
-      [debian/gstreamer-plugins-good.install]
-    - New icydemux plugin.
-      . Install in gstreamer-plugins-good.
-        [debian/gstreamer-plugins-good.install]
-
- -- Loic Minier <lool@dooz.org>  Sat,  6 May 2006 11:52:57 +0200
-
-gst-plugins-good0.10 (0.10.2-2) unstable; urgency=low
-
-  * Depend on the alsa package instead of recommending it, since package
-    managers don't honor Recommends: in all cases. (Closes: #352212)
-    [debian/control, debian/control.in]
-
- -- Loic Minier <lool@dooz.org>  Thu, 16 Feb 2006 14:45:38 +0100
-
-gst-plugins-good0.10 (0.10.2-1) unstable; urgency=low
-
-  * New upstream release, "Papa was a rolling stone".
-
- -- Loic Minier <lool@dooz.org>  Tue, 14 Feb 2006 10:44:13 +0100
-
-gst-plugins-good0.10 (0.10.1.2-1) unstable; urgency=low
-
-  * New upstream pre-release.
-    - Bump up libgstreamer0.10-dev build-dep to >= 0.10.2.2.
-      [debian/control, debian/rules]
-    - Bump up libgstreamer-plugins-base0.10-dev to >= 0.10.2.2.
-      [debian/build-deps.in, debian/build-deps, debian/control]
-    - Add apetag plugin.
-      . Install plugin.
-      [debian/gstreamer-plugins-good.install]
-    - Add cdio plugin.
-      . Add libcdio-dev >= 0.71 build-dep.
-      . Install plugin.
-      [debian/build-deps, debian/build-deps.in, debian/control, debian/gstreamer-plugins-good.install]
-  * Use upstream descriptions in packages descriptions.
-    [debian/control, debian/control.in]
-
- -- Loic Minier <lool@dooz.org>  Sat, 11 Feb 2006 17:30:38 +0100
-
-gst-plugins-good0.10 (0.10.1-2) unstable; urgency=low
-
-  * Recommend gstreamer0.10-alsa and gstreamer0.10-x, as these are used by
-    default upstream -- in the GConf schemas -- and used from the autodetect
-    audio and videosinks.
-    [debian/control, debian/control.in]
-
- -- Loic Minier <lool@dooz.org>  Sun,  5 Feb 2006 15:08:53 +0100
-
-gst-plugins-good0.10 (0.10.1-1) unstable; urgency=low
-
-  * New upstream release, "Li".
-    - Bump libgstreamer-plugins-base0.10-dev build-dep to >= 0.10.1.
-      [debian/build-deps.in, debian/control]
-    - Bump libgstreamer0.10-dev build-dep to >= 0.10.1.
-      [debian/control, debian/rules]
-    - Add id3demux plugin.
-      [debian/gstreamer-plugins-good.install]
-    - Add translated strings from /usr/share/locale.
-      [debian/gstreamer-plugins-good.install]
-  * Drop useless gst_plugins_base_lib_dev_dep, gst_plugins_base_lib_dev,
-    gst_plugins_base_lib, and gst_plugins_good_version definitions.
-    [debian/rules]
-
- -- Loic Minier <lool@dooz.org>  Sun, 15 Jan 2006 18:04:49 +0100
-
-gst-plugins-good0.10 (0.10.0-1) unstable; urgency=low
-
-  [ Sebastien Bacher ]
-  * New package:
-    - clean patches
-      [debian/patches/50_cdparanoia-fix-eos-detection-of-last-title.patch]
-    - updated Build-Depends [debian/build-deps.in]
-    - updated documentation [debian/README.Debian, debian/TODO.Debian]
-    - updated packages list [debian/control.in, debian/gstreamer-alsa.install,
-      debian/gstreamer-gnomevfs.install, debian/gstreamer-misc.install,
-      debian/gstreamer-plugins-base-apps.instal,
-      debian/gstreamer-plugins-base-apps.manpages,
-      debian/gstreamer-plugins-base-doc.install,
-      debian/gstreamer-x.install, debian/libgstreamer-plugins-base-dev.install,
-      debian/libgstreamer-plugins-base.install, debian/gstreamer-aa.install,
-      debian/gstreamer-auto.install, debian/gstreamer-caca.install,
-      debian/gstreamer-esd.install, debian/gstreamer-misc-good.install,
-      debian/gstreamer-oss.install, debian/gstreamer-plugins-good-doc.install,
-      debian/rules]
-    - updated upstream location [debian/watch]
-    - don't use type-handling it's not useful
-      [debian/build-deps.in, debian/control.in, debian/rules]
-
-  [ Loic Minier ]
-  * Merge aa, auto, caca, and oss packages and plugins in misc and let it
-    provide audio and videosinks;  use a couple of @GST_ABI@s where
-    appropriate.
-    [debian/control, debian/control.in,
-    debian/gstreamer-aa.install, debian/gstreamer-caca.install,
-    debian/gstreamer-misc-good.install, debian/gstreamer-oss.install,
-    debian/rules]
-  * Rename for good misc-good in good.
-    [debian/control debian/control.in
-     debian/gstreamer-misc-good.install debian/rules]
-  * Downgrade cdbs build-dep for Debian.
-    [debian/build-deps, debian/build-deps.in, debian/control]
-  * Rename gstreamer0.10-good in gstreamer0.10-plugins-good.
-    [debian/control, debian/control.in, debian/gstreamer-good.install,
-    debian/gstreamer-plugins-good.install, debian/rules]
-  * Add a build-dep on check.
-    [debian/build-deps, debian/build-deps.in, debian/control]
-  * Remove python-twisted build-dep.
-    [debian/build-deps, debian/build-deps.in, debian/control]
-
- -- Loic Minier <lool@dooz.org>  Wed, 21 Dec 2005 17:37:46 +0100
-
-gst-plugins-base0.10 (0.10.0-1) unstable; urgency=low
-
-  [ Sebastien Bacher ]
-  * New package:
-    - build the documentation [debian/rules]
-    - no action needed to register the plugins with the new version
-      [debian/gstreamer-plugin-template.postinst,
-       debian/gstreamer-plugin-template.postrm,
-       debian/libgstreamer-plugins.postinst,
-       debian/libgstreamer-plugins.postrm, debian/rules]
-    - drop mechanism to build extra packages for other distributions around,
-      it's not useful for base [debian/extras, debian/rules]
-    - drop transitionnal workaround [debian/gstreamer-plugin-template.preinst]
-    - new gstreamer-plugin-base-doc package [debian/control.in, debian/rules]
-    - remove obsolete patches
-      [debian/patches/10_wavpack-high-quality-segfault.patch,
-      debian/patches/30_alsa-verify-accepted-period-size.patch,
-      debian/patches/31_alsa-advanced-probing.patch,
-      debian/patches/40_audioscale-timestamps-and-durations.patch,
-      debian/patches/50_ladspa-quiet.patch]
-    - updated the Build-Depends [debian/build-dep.in]
-    - updated the packages descriptions [debian/control.in]
-    - updated the packages names/list [debian/control.in,
-      debian/gstreamer-a52dec.install, debian/gstreamer-aa.install,
-      debian/gstreamer-artsd.install, debian/gstreamer-audiofile.install,
-      debian/gstreamer-avifile.install, debian/gstreamer-caca.install,
-      debian/gstreamer-cdio.install, debian/gstreamer-dvd.install,
-      debian/gstreamer-dv.install, debian/gstreamer-esd.install,
-      debian/gstreamer-festival.install, debian/gstreamer-flac.install,
-      debian/gstreamer-gsm.install, debian/gstreamer-gtk.install,
-      debian/gstreamer-hermes.install, debian/gstreamer-jpeg.install,
-      debian/gstreamer-lame.install, debian/gstreamer-mad.install,
-      debian/gstreamer-mikmod.install, debian/gstreamer-mms.install,
-      debian/gstreamer-mpeg2dec.install, debian/gstreamer-oss.install,
-      debian/gstreamer-sdl.install, debian/gstreamer-sid.install,
-      debian/gstreamer-speex.install, debian/gstreamer-swfdec.install,
-      debian/libgstreamer-gconf.install, debian/libgstreamer-gconf-dev.install,
-      debian/gstreamer-vorbis.install, debian/rules]
-    - updated the packages lists [debian/gstreamer-misc.install,
-      debian/libgstreamer-plugins-base-dev.install,
-      debian/libgstreamer-plugins-base.install]
-    - updated packages content
-      [debian/gstreamer-misc.install, debian/gstreamer-x.install]
-    - updated the version [debian/rules]
-    - updated watch file [debian/watch]
-
-  [ Loic Minier ]
-  * Minor cleanups.
-    [debian/rules]
-  * Add Sebastien Bacher to Uploaders.
-    [debian/control, debian/control.in]
-
- -- Loic Minier <lool@dooz.org>  Sat, 17 Dec 2005 18:11:03 +0100
-
-gst-plugins0.8 (0.8.11-3) unstable; urgency=medium
-
-  * New CDIO plugin package.
-    . Add libcdio-dev build-dep for CDIO support.
-      [debian/build-deps.in, debian/build-deps, debian/control]
-    . Add package description and file listing.
-      [debian/gstreamer-cdio.install, debian/control.in, debian/control]
-    . List package in plugins build-list. [debian/rules]
-    . List package in gstreamer-plugins deps.
-      [debian/control.in, debian/control]
-  * New MMS plugin package. (Closes: #301246)
-    . Add libmms-dev build-dep for mms:// and mmsh:// support.
-      [debian/build-deps.in, debian/build-deps, debian/control]
-    . Add package description and file listing.
-      [debian/gstreamer-cdio.install, debian/control.in, debian/control]
-    . List package in plugins build-list. [debian/rules]
-    . List package in gstreamer-plugins deps.
-      [debian/control.in, debian/control]
-  * Fix the homepage of the mikmod page and stop linking to an adult web site.
-    [debian/control, debian/control.in]
-  * Remove "Section: libs" from binary packages.
-    [debian/control, debian/control.in]
-  * Exit with non-zero code when requesting an unknown plugin.
-    [debian/extra]
-  * Add sample code to permit other distros to build additional plugins.
-    [debian/rules]
-  * Minor cleanups.
-    [debian/rules]
-  * New Gtk / Gdk package to split out this dep-tree for KDE folks, from
-    Ubuntu, thanks Sebastien Bacher.
-    . Add package description and file listing, remove it from -misc.
-      [debian/control.in, debian/control, debian/gstreamer-gtk.install,
-      debian/gstreamer-misc.install]
-    . List package in plugins build-list. [debian/rules]
-    . List package in gstreamer-plugins deps.
-      [debian/control.in, debian/control]
-    . Only "Replace" with -misc in the first version doing the split
-      (0.8.11-0ubuntu3), no Conflict needed.
-  * Add wavpack support, build the wavpack plugin and ship it in -misc.
-    (Closes: #339598)
-    . Add a libwavpack-dev build-dep.
-      [debian/build-deps, debian/build-deps.in]
-    . Ship plugin in -misc.
-      [debian/gstreamer-misc.install]
-    . Adjust the size of the internal decode buffer dynamically instead of
-      assuming 0.5 seconds are enough;  fixes a segfault when playing files
-      encoded with -h;  upstream bug: #317774;  fix committed in branch
-      BRANCH-GSTREAMER-0_8.
-      [debian/patches/10_wavpack-high-quality-segfault.patch]
-  * Backport some interesting upstream fixes from CVS fixing most resampling
-    issues for non-standard bitrates and for complex ALSA configurations
-    (especially dmix), thanks Tim-Philipp Müller, Luca Ognibene, and others.
-    (Closes: #323447, #324163, #326135, #340038)
-    - When doing _set_period_size_near(), see what period size was actually
-      set in the end and continue working with that value instead of just
-      assuming the desired period size was accepted;  upstream bug #318767;
-      fix committed in branch BRANCH-GSTREAMER-0_8.
-      [debian/patches/30_alsa-verify-accepted-period-size.patch]
-    - Don't mess up timestamps and durations when resampling by more than a
-      factor of 2 (e.g. 8kHz => 48kHz);  upstream bug #318273;  fix committed
-      in branch BRANCH-GSTREAMER-0_8.
-      [debian/patches/40_audioscale-timestamps-and-durations.patch]
-    - When the default device is being used, try to probe the caps of the
-      underlying device instead if possible. This should give more narrowly
-      defined caps that are closer to the hardware's capabilities. This is
-      enabled by default, but can be switched off via the new
-      'advanced-probing' property;  upstream bug #315121;  fix committed in
-      branch BRANCH-GSTREAMER-0_8.
-      [debian/patches/31_alsa-advanced-probing.patch]
-  * Drop the polypaudio plugin package. (Closes: #342278)
-    . Drop libpolyp-dev (>= 0.7) build-dep.
-      [debian/build-deps.in, debian/build-deps, debian/control]
-    . Remove package description and file listing.
-      [debian/gstreamer-polypaudio.install, debian/control.in, debian/control]
-    . Remove package from plugins build-list. [debian/rules]
-    . Remove package from gstreamer-plugins deps.
-      [debian/control.in, debian/control]
-  * Add libgconf2-dev, libglib2.0-dev, liborbit2-dev, libpopt-dev, libxml2-dev
-    deps to libgstreamer-gconf0.8-dev as listed in its .la files.
-    [debian/control, debian/control.in]
-  * Add libglib2.0-dev, libpopt-dev, libxml2-dev deps to
-    libgstreamer-plugins0.8-dev as listed in its .la files.
-    [debian/control, debian/control.in]
-  * Fix EOS detection for last title (fixes gnome-cd hanging after last track
-    ends), thanks Gustavo Noronha Silva;  upstream bug #317630;  fix committed
-    in branch BRANCH-GSTREAMER-0_8. (Closes: #330954)
-    [debian/patches/50_cdparanoia-fix-eos-detection-of-last-title.patch]
-  * Don't overwrite DEB_CONFIGURE_EXTRA_FLAGS.
-    [debian/rules]
-
- -- Loic Minier <lool@dooz.org>  Sun, 11 Dec 2005 14:52:38 +0100
-
-gst-plugins0.8 (0.8.11-2) unstable; urgency=high
-
-  * Add misc:depends to all binary packages. (Closes: #329759)
-
- -- Loic Minier <lool@dooz.org>  Mon, 17 Oct 2005 21:41:54 +0200
-
-gst-plugins0.8 (0.8.11-1) unstable; urgency=low
-
-  * Override gstreamer-dv section to extra because it depends on libavc1394-0
-    which is in extra. [debian/control, debian/control.in]
-  * Bump libflac-dev build-dependency for the latest flac soname change
-    (libflac6 -> libflac7). (Closes: #325940)
-  * New upstream release, "... And Thanks For All The Fix".
-    - New plugin imagemixer. [debian/gstreamer-misc.install]
-    - New plugin dvdsubdec. [debian/gstreamer-misc.install]
-    - Drop obsolete artsd patch, merged upstream.
-      [debian/patches/25_artds-no-name.patch]
-  * Update FSF address. [debian/copyright]
-  * Add cairo plugin. [debian/build-deps, debian/build-deps.in,
-    debian/control, debian/gstreamer-misc.install]
-
- -- Loic Minier <lool@dooz.org>  Sun,  4 Sep 2005 21:19:47 +0200
-
-gst-plugins0.8 (0.8.10-3) unstable; urgency=high
-
-  * Urgency high because this fixes some RC bugs and 0.8.10-2 was caught in
-    the C++ transition.
-  * Bump up build-deps to get versions past the C++ transition.
-    [debian/build-deps, debian/build-deps.in, debian/control]
-    - libsdl1.2-dev
-    - libsidplay1-dev (Closes: #321315)
-    - libarts1-dev, libartsc0-dev
-  * Change X11 build-deps for the Xorg transition.
-    [debian/build-deps, debian/build-deps.in, debian/control]
-    - remove xlibs-dev and xlibs-pic.
-    - add libx11-dev, libxext-dev, and libxv-dev.
-  * Drop jack plugin. [debian/build-deps, debian/build-deps.in,
-    debian/control, debian/control.in, debian/gstreamer-jack.install,
-    debian/rules] (Closes: #321648)
-  * Add libgstglimagesink plugin. [debian/gstreamer-x.install]
-  * Add libgstfreeze plugin. (Closes: #318146) [debian/gstreamer-misc.install]
-  * Let libgstreamer-gconf suggest gnome-media. (Closes: #294490)
-    [debian/control, debian/control.in]
-
- -- Loic Minier <lool@dooz.org>  Fri, 12 Aug 2005 18:36:58 +0200
-
-gst-plugins0.8 (0.8.10-2) unstable; urgency=medium
-
-  [ Sebastien Bacher ]
-  * debian/build-deps.in:
-    - list libpolyp-dev.
-  * debian/control.in:
-    - gstreamer0.8-plugins depends on gstreamer0.8-polypaudio.
-    - gstreamer0.8-polypaudio description.
-  * gstreamer-polypaudio.install:
-    - install libpolypaudio.so.
-  * debian/rules:
-    - list polypaudio.
-
-  [ Loic Minier ]
-  * Update jack dependency. (Closes: #317197)
-    [debian/build-deps, debian/build-deps.in, debian/control]
-  * Update aalib dependency. (Closes: #320886)
-    [debian/build-deps, debian/build-deps.in, debian/control]
-
-  * Urgency medium because of RC.
-
- -- Loic Minier <lool@dooz.org>  Sun, 10 Jul 2005 19:27:08 +0200
-
-gst-plugins0.8 (0.8.10-1) unstable; urgency=low
-
-  * Loic Minier:
-    * New upstream release "Jangle".
-      - Bump inter-dependencies to >= 0.8.10.
-    * Use upstream fix for the "name" property of the artsdsink element.
-      [debian/patches/25_artds-no-name.patch]
-
- -- Loic Minier <lool@dooz.org>  Sat,  2 Jul 2005 21:04:40 +0200
-
-gst-plugins0.8 (0.8.9-2) unstable; urgency=medium
-
-  * Loic Minier:
-    * Urgency medium as last gstreamer0.8 release exposed an artsdsink
-      problem fixed here.
-    * Add a versioned dependency with >= current-upstream-version to all
-      current shlibs inter-dependencies to ensure consistency of symbols.
-      (Closes: #315556) [debian/control, debian/control.in, debian/rules]
-    * Remove the "name" property in the artsd plugin as it interferes with
-      the usage of this property within GStreamer. (Closes: #314762)
-      [debian/patches/25_artds-no-name.patch]
-    * Call gst-register and gst-compprep with GST_REGISTRY in their
-      environment to override the default behavior of writing to
-      /root/.gstreamer-0.8, waiting for an upstream fix.
-      [debian/gstreamer-plugin-template.postinst,
-      debian/gstreamer-plugin-template.postrm]
-    * Add a postinst/postrm snipset to register plugins in
-      libgstreamer-plugins0.8. (Closes: #283658)
-      [debian/libgstreamer-plugins.postrm,
-      debian/libgstreamer-plugins.postinst, debian/changelog, debian/rules]
-    * Remove left over /root/.gstreamer-0.8 tree if it hasn't been modified.
-      [debian/gstreamer-plugin-template.preinst, debian/rules]
-    * Set Maintainer to group. [debian/control, debian/control.in]
-    * Bump Standards-Version to 3.6.2, no change needed.
-      [debian/control, debian/control.in]
-    * Workaround type-handling bug #315761.
-      [debian/control, debian/control.in, debian/rules]
-
- -- Loic Minier <lool@dooz.org>  Mon, 27 Jun 2005 15:44:35 +0200
-
-gst-plugins0.8 (0.8.9-1) unstable; urgency=low
-
-  * Loic Minier:
-    * New upstream release "Old Hat".
-      - Fix SIGFPE in alsasrc. (Closes: #279399)
-      - New Musepack plugin package.
-        . Add libmpcdec-dev build-dep for Musepack support, this is now
-          detected in a Debian compatible manner via mpcdec/mpcdec.h and
-          -lmpcdec. [debian/build-deps.in, debian/build-deps, debian/control]
-        . Add package description and file listing.
-          [debian/gstreamer-musepack.install, debian/control.in,
-          debian/control]
-        . List package in plugins build-list. [debian/rules]
-        . List package in gstreamer-plugins deps.
-          [debian/control.in, debian/control]
-      - Renamed and updated "ladspa" patch.
-        [debian/patches/ladspa-quiet.patch,
-        debian/patches/50_ladspa-quiet.patch]
-      - Add video4linuxradio plugin to the gstreamer-misc package.
-        [debian/rules]
-    * Add compatibility block for older dpkg and use DEB_HOST_ARCH_OS.
-    * Add myself as uploader. [debian/control.in, debian/control]
-    * Fix indentation and executable permission of package maintaining
-      helpers. [debian/extra, debian/maint, debian/mk.control]
-    * Remove more bits from the arts plugin, left over in 0.8.1-2.
-      [debian/extra, debian/gstreamer-arts.install]
-    * Document the role of most files. [debian/HACKING.Debian]
-    * Add a TODO list for the Debian package. [debian/TODO.Debian]
-
- -- Loic Minier <lool@dooz.org>  Tue, 21 Jun 2005 07:47:04 +0200
-
-gst-plugins0.8 (0.8.8-3) unstable; urgency=low
-
-  * debian/build-deps.in:
-    * Bump liboil dependency to liboil0.3-dev.  gst-plugins doesn't yet use
-      0.3 itself but the swfdec plugin build requires it.
-
- -- David I. Lehn <dlehn@debian.org>  Wed, 30 Mar 2005 19:08:07 -0500
-
-gst-plugins0.8 (0.8.8-2) unstable; urgency=low
-
-  * debian/control.in:
-    * gstreamer0.8-vorbis depends on gstreamer0.8-misc >= 0.8.8-1
-      (Closes: #300082, #299954, #299921)
-
- -- David I. Lehn <dlehn@debian.org>  Thu, 17 Mar 2005 12:53:38 -0500
-
-gst-plugins0.8 (0.8.8-1) unstable; urgency=low
-
-  * New upstream
-  * debian/patches/flac.patch:
-    * Remove: included upstream
-  * debian/gstreamer-misc.install:
-    * Add new plugins: autodetect, dvdlpcmdec, puzzle, rfbsrc, subparse
-    * Add new plugins with lib dependencies: gconfelements, mng, shout2
-      (Closes: #292011)
-  * debian/build-deps.in:
-    * Add: libmng-dev, libshout3-dev
-  * Upstream fixes:
-    * Xv falls back to X11 (Closes: #296848)
-    * Better audio sink selection (Closes: #284210)
-    * alsasink crash (Closes: #296751)
-
- -- David I. Lehn <dlehn@debian.org>  Wed, 16 Mar 2005 01:00:39 -0500
-
-gst-plugins0.8 (0.8.7-3) unstable; urgency=low
-
-  * debian/rules, debian/build-deps.in
-    * Apply additional kfreebsd-gnu patch (Closes: #272568)
-  * debian/patches/flac.patch:
-    * Upstream fix for FLAC API change (Closes: #290784)
-
- -- David I. Lehn <dlehn@debian.org>  Mon, 17 Jan 2005 17:53:42 -0500
-
-gst-plugins0.8 (0.8.7-2) unstable; urgency=low
-
-  * debian/rules:
-    * Bump libgstreamer0.8-dev dependency to >= 0.8.7.1
-
- -- David I. Lehn <dlehn@debian.org>  Sat,  8 Jan 2005 15:50:45 -0500
-
-gst-plugins0.8 (0.8.7-1) unstable; urgency=low
-
-  * New upstream
-  * debian/build-deps.in, debian/control.in, debian/rules,
-    debian/gstreamer-dv.install, debian/gstreamer-misc.install:
-    * Patch build system for kfreebsd-gnu (Closes: #272568)
-  * debian/rules:
-    * Distribute NEWS (as requested in #275717)
-  * debian/gstreamer-misc.install:
-    * Add new plugins: apetag, tta
-  * debian/patches/configure-speex.patch:
-    * Remove patch, included upstream
-  * debian/build-deps.in:
-    * Build against latest libflac-dev
-
- -- David I. Lehn <dlehn@debian.org>  Fri,  7 Jan 2005 13:52:27 -0500
-
-gst-plugins0.8 (0.8.6-1) unstable; urgency=low
-
-  * New upstream
-    * Rhythmbox hangs/crashes fixes (Closes: #245757, #277146)
-    * Rhythmbox silence after resume play fixes (Closes: #261841)
-    * Ogg seeking fixes (Closes: #277396)
-  * debian/build-deps.in:
-    * Bump libswfdec to libswfdec0.3-dev
-    * Add libavc1394-dev
-    * Add liboil0.2-dev
-    * Versioned libspeex-dev
-  * debian/gstreamer-misc.install:
-    * Add new plugin: equalizer
-  * debian/watch:
-    * Add watch file
-  * debian/rules:
-    * Update GStreamer core dev dependency to 0.8.4
-  * ext/ladspa/gstladspa.c, debian/patches/ladspa-quiet.patch:
-    * Move patch to debian/patches/
-
- -- David I. Lehn <dlehn@debian.org>  Mon, 29 Nov 2004 04:02:43 -0500
-
-gst-plugins0.8 (0.8.5-1) unstable; urgency=low
-
-  * New upstream
-  * debian/rules:
-    * Use CDBS simple-patchsys
-    * debian/control: to debian/control:: for newer CDBS
-  * debian/patches/configure-speex.diff:
-    * Fix speex detection
-
- -- David I. Lehn <dlehn@debian.org>  Wed,  6 Oct 2004 20:15:52 -0400
-
-gst-plugins0.8 (0.8.4-1) unstable; urgency=low
-
-  * New upstream
-  * debian/control.in:
-    * Add -theora package to -plugins package
-  * debian/rules:
-    * Drop upstream ChangeLog from plugin packages due to size
-  * debian/README.Debian:
-    * Add note about ChangeLog
-
- -- David I. Lehn <dlehn@debian.org>  Thu,  2 Sep 2004 23:03:44 -0400
-
-gst-plugins0.8 (0.8.3-1) unstable; urgency=low
-
-  * New upstream
-  * debian/control.in, debian/build-deps.in, debian/gstreamer-theora.install,
-    debian/rules:
-    * New theora plugin
-  * debian/gstreamer-misc.install:
-    * Add new plugins: alphacolor, decodebin, multifilesink, playbin
-
- -- David I. Lehn <dlehn@debian.org>  Sat,  7 Aug 2004 09:50:10 -0400
-
-gst-plugins0.8 (0.8.2-3) unstable; urgency=high
-
-  * debian/libgstreamer-gconf.postinst:
-    Remove.  schema install now handled by dh_gconf which moved the schema
-    location causing old hardcoded /etc path to fail.
-    (Closes: #259538, #259119, #259205)
-  * Urgency high: GNOME team wants this in sarge now.
-
- -- David I. Lehn <dlehn@debian.org>  Fri, 16 Jul 2004 09:17:18 -0400
-
-gst-plugins0.8 (0.8.2-2) unstable; urgency=low
-
-  * debian/rules:
-    * Bump libgstreamer0.8-dev dep up to get fixed shlibs
-  * Rebuild with proper shlibs (Closes: #256181, #256494)
-
- -- David I. Lehn <dlehn@debian.org>  Wed,  7 Jul 2004 01:16:48 -0400
-
-gst-plugins0.8 (0.8.2-1) unstable; urgency=medium
-
-  * New upstream
-  * debian/build-deps.in:
-    * Add libdts-dev
-  * ext/Makefile.{am,in}:
-    * Fix so dts dir is built
-  * debian/gstreamer-misc.install:
-    * Add DTS plugin
-    * Added alpha, audiorate, dtsdec, multipart, videobox, videomixer, and
-      videorate
-  * debian/rules:
-    * Update libgstreamer0.8-dev build dependency to 0.8.3-2
-  * debian/control.in:
-    * Remove explicit libgstreamer deps, autodetected now
-
- -- David I. Lehn <dlehn@debian.org>  Wed, 23 Jun 2004 23:50:53 -0400
-
-gst-plugins0.8 (0.8.1-4) unstable; urgency=low
-
-  * gst-libs/gst/riff/riff-media.c:
-    * caps type typo fix from CVS
-  * gst-libs/gst/resample/private.h:
-    * disabled ppc code fix from CVS (Closes: #252991)
-  * sys/v4l/gstv4lsrc.c:
-    * caps fix NULL->any from CVS
-
- -- David I. Lehn <dlehn@debian.org>  Wed, 16 Jun 2004 01:24:41 -0400
-
-gst-plugins0.8 (0.8.1-3) unstable; urgency=low
-
-  * rerun autoget.sh to fix arm builds (Closes: #251592)
-  * gconf/gstreamer.schemas.in, gcon/gstreamer-0.8.schemas:
-    s/xvideosink/xvimagesink/ (Closes: #250575) 
-
- -- David I. Lehn <dlehn@debian.org>  Tue,  1 Jun 2004 10:10:37 -0400
-
-gst-plugins0.8 (0.8.1-2) unstable; urgency=low
-
-  * debian/build-deps.in:
-    * Update "libdv2-dev" to "libdv4-dev | libdv-dev"
-  * debian/control.in, debian/extra, debian/rules:
-    * Remove arts plugin.  Detection, flags, and include directory build code
-      is too buggy for plugin to build at the moment.
-
- -- David I. Lehn <dlehn@debian.org>  Thu, 29 Apr 2004 18:10:48 -0400
-
-gst-plugins0.8 (0.8.1-1) unstable; urgency=low
-
-  * New upstream
-  * debian/gstreamer-misc.install:
-    * add libgstdebug.so
-
- -- David I. Lehn <dlehn@debian.org>  Sun, 18 Apr 2004 01:04:36 -0400
-
-gst-plugins0.8 (0.8.0-2) unstable; urgency=low
-
-  * Bump to -2 to ease upgrades for early -1 testers
-  * debian/build-deps.in:
-    * Add libgtk2.0-dev 
-
- -- David I. Lehn <dlehn@debian.org>  Thu, 15 Apr 2004 17:50:14 -0400
-
-gst-plugins0.8 (0.8.0-1) unstable; urgency=low
-
-  * New upstream (Closes: #234071, #240663)
-  * debian/rules:
-    * Switch to CDBS
-    * Version now at 0.8
-    * Convert various control files to versioned ones for build
-    * Add/rename/remove generated plugins files
-  * debian/control.in:
-    * Update Standards-Version to 3.6.1
-    * Add -caca and -speex plugins
-    * Remove -http plugin
-  * debian/build-deps.in:
-    * Add cdbs
-    * Update debhelper >= 4.1.0
-    * Add caca, speex, and pango deps
-    * Remove libghttp-dev
-  * debian/gstreamer-http.install
-    * Remove
-  * debian/gstreamer-{speex|caca}.install:
-    * Add new plugins
-  * debian/*.install:
-    * Append debian/tmp for CDBS
-    * General cleanups to support versioned files and locations
-  * debian/gstreamer-esd.install:
-    * Remove libgstesdmod
-    * Change libgstesdsink to libgstesd
-  * debian/gstreamer-plugin-libs.install:
-    * Stick locale info in here for lack of a better place
-  * debian/gstreamer-plugin-libs[-dev].install:
-    * Add support for colorbalance, mixer, navigation, propertyprobe, tag,
-      tuner, xoverlay, and xwindowlistener
-    * Add pkgconfig support for plugins, interfaces, and media-info
-  * debian/gstreamer-gnomevfs.install:
-    * s/libgstgnomevfs{src|sink}.so/libgstgnomevfs.so/
-  * debian/gstreamer-colorspace.install:
-    * Rename to gstreamer-hermes.install
-    * Move generic and ffmpeg based colorspace plugins to -misc
-    * Provide gstreamerX.Y-colorspace
-  * debian/gstreamer-misc.install:
-    * v4l/v4l2 support merged to libgstvideo4linux[2].so
-    * Add gdkpixbuf, interleave, nassink, ogg, smoothwave, tagedit,
-      textoverlay, timeoverlay, typefindfunctions, videobalance, videodrop,
-      videofilter, videoflip
-    * Move generic and ffmpeg based colorspace plugins from -hermes
-    * Provide gstreamerX.Y-colorspace
-  * debian/gstreamer-plugin-libs.install:
-    * Rename to libgstreamer-plugins.install
-  * debian/gstreamer-plugin-libs-dev.install:
-    * Rename to libgstreamer-plugins-dev.install
-  * debian/gstreamer-gconf.install:
-    * Rename libgstreamer-gconf.install
-    * Remove dev files
-  * debian/gstreamer-gconf.postinst:
-    * Rename to libgstreamer-gconf.postinst
-  * debian/libgstreamer-gconf-dev.install:
-    * Added
-    * Add dev parts from gstreamer-gconf.install
-  * configure.ac, configure:
-    * Patch from CVS to get arts to detect on Debian boxen
-  * ext/speex/gstspeex{dec,enc}.c:
-    * Upstream patch for static pad templates (caused gst-compprep-0.8 bugs)
-  * ext/ladspa/gstladspa.c:
-    * Change g_warning to DEBUG_OBJ to silence gst-compprep
-  * ext/libcaca/gstcacsink.c:
-    * Upstream patch to avoid cacasink windows with gst-inspect/compprep
-
- -- David I. Lehn <dlehn@debian.org>  Wed, 14 Apr 2004 19:14:14 -0400
-
-gst-plugins0.7 (0.7.6-1) unstable; urgency=low
-
-  * New upstream
-
- -- David I. Lehn <dlehn@debian.org>  Wed, 17 Mar 2004 19:06:48 -0500
-
-gst-plugins0.7 (0.7.5-1) unstable; urgency=low
-
-  * New upstream
-
- -- David I. Lehn <dlehn@debian.org>  Wed, 17 Mar 2004 18:47:19 -0500
-
-gst-plugins0.7 (0.7.4-1) unstable; urgency=low
-
-  * New upstream
-
- -- David I. Lehn <dlehn@debian.org>  Wed, 17 Mar 2004 18:46:27 -0500
-
-gst-plugins0.7 (0.7.3-1) unstable; urgency=low
-
-  * New upstream
-
- -- David I. Lehn <dlehn@debian.org>  Wed, 17 Mar 2004 18:42:05 -0500
-
-gst-plugins0.7 (0.7.1-1) unstable; urgency=low
-
-  * New upstream
-    * Versioning package as 0.7
-
- -- David I. Lehn <dlehn@debian.org>  Wed, 17 Mar 2004 18:31:51 -0500
-
-gst-plugins (0.6.4-4) unstable; urgency=low
-
-  * ext/alsa/gstalsa.h:
-    * Patch to compile with alsa-lib 1.0.x (Closes: #231870)
-
- -- David I. Lehn <dlehn@debian.org>  Sat, 14 Feb 2004 17:49:01 -0500
-
-gst-plugins (0.6.4-3) unstable; urgency=low
-
-  * debian/build-deps.in:
-    * Update jack dependency to libjack0.80.0-dev (>= 0.94.0)
-      (Closes: #221620, #228784)
-    * Update libmpeg2 dependency to libmpeg2-4-dev (>= 0.4.0b)
-  * ext/mpeg2dec/gstmpeg2dec.c: Patch for libmpeg2 0.4.0b
-
- -- David I. Lehn <dlehn@debian.org>  Mon, 26 Jan 2004 18:21:45 -0500
-
-gst-plugins (0.6.4-2) unstable; urgency=low
-
-  * debian/rules: Disable ffmpeg for everything but i386 due to PIC issues
-    (Closes: #219284)
-
- -- David I. Lehn <dlehn@debian.org>  Thu,  6 Nov 2003 16:30:35 -0500
-
-gst-plugins (0.6.4-1) unstable; urgency=low
-
-  * New upstream
-    * ESD updates (Closes: #218736)
-  * Acknowledge NMU (Closes: #217981, #213811)
-  * Rebuild to fix gconf liblinc1 dependency (Closes: #217771)
-  * gstreamer-misc: add v4l2 support (Closes: #199900)
-  * Use pre-Linux-2.6 videodev.h to compile v4l support
-
- -- David I. Lehn <dlehn@debian.org>  Mon,  3 Nov 2003 15:10:59 -0500
-
-gst-plugins (0.6.3-1.1) unstable; urgency=low
-
-  * NMU - Patch from Jordi Mallach
-  * debian/build-deps.in: libgconf2-dev and libgnomevfs2-dev need GNOME 2.4
-    versions for the liblinc1 transition (closes: #217981).
-  * debian/rules: gstreamer build-dep should be versioned (>= 0.6.3)
-    (closes: #213811).
-
- -- LaMont Jones <lamont@debian.org>  Thu, 30 Oct 2003 09:12:11 -0700
-
-gst-plugins (0.6.3-1) unstable; urgency=low
-
-  * New upstream
-    * Includes ESD seeking fix (Closes: #201171)
-
- -- David I. Lehn <dlehn@debian.org>  Mon,  1 Sep 2003 23:15:49 -0400
-
-gst-plugins (0.6.2-2) unstable; urgency=low
-
-  * Fix ffmpeg makefile install rule to work even when ffmpeg build is
-    disabled (Closes: #198148, #199072)
-  * Apply partial patches from running autogen.sh to fix arm builds (excluding
-    other unrelated generated file changes) (Closes: #199872)
-  * Update to support libdvdnav 0.1.9 API
-
- -- David I. Lehn <dlehn@debian.org>  Fri, 11 Jul 2003 01:01:15 -0400
-
-gst-plugins (0.6.2-1) unstable; urgency=low
-
-  * New upstream
-  * Add dv1394src to gstreamer-dv
-
- -- David I. Lehn <dlehn@debian.org>  Thu, 12 Jun 2003 11:39:51 -0400
-
-gst-plugins (0.6.1-2) unstable; urgency=low
-
-  * (unreleased)
-  * Adapt to gstreamer package merge: remove -core, -core-libs, -core-libs-dev
-    dependencies as needed.  Fixes missing scheduler bugs.
-    (Closes: #181503, #191720)
-  * Use versioned gst-{register,compprep}-0.6
-  * Update jack dependency to libjack0.71.2-dev (Closes: #195401)
-  * Update libdvdnav dependency to (>= 0.1.7) and revert patch for
-    compatibility with 0.1.3.
-  * Update libdvdread2 dependency to libdvdread3-dev
-  * Remove DISPLAY unset hacks from postinst/postrm scripts and fix non-X
-    installs with 0.6.2 CVS xvideosink patch. (Closes: #165372, #168438)
-  * Link libgstplay to libgstcontrol. (Closes: #194107)
-
- -- David I. Lehn <dlehn@debian.org>  Thu,  5 Jun 2003 02:29:44 -0400
-
-gst-plugins (0.6.1-1) unstable; urgency=low
-
-  * New upstream
-  * Update maintainer address to @debian.org
-  * gstreamer-gconf libs properly linked upstream (Closes: Bug#187353)
-  * debian/control.in:
-    * gstreamer-vorbis depends on gstreamer-core-libs (Closes: Bug#188606)
-  * Apply gnomevfs patch from http://bugzilla.gnome.org/show_bug.cgi?id=94113
-  * ffmpeg plugin only builds, and now is only packaged, on i386/powerpc (Yes
-    this is bad - better shared lib support needed.) (Closes: Bug#186525)
-  * Revert dvdnav support to libdvdnav 0.1.3 API
-  * Unset DISPLAY before calling gst-register/gst-compprep
-  * ext/ladspa/gstladspa.c:472: s/g_warning/GST_DEBUG/ to avoid printing of a
-    warning on every plugin package install when swh-plugins is installed.
-    (sinCos plugin executes this code path)
-
- -- David I. Lehn <dlehn@debian.org>  Sat,  3 May 2003 18:30:16 -0400
-
-gst-plugins (0.6.0-4) unstable; urgency=low
-
-  * debian/build-deps.in:
-    * Updated libvorbis-dev to (>= 1.0.0-2) (Closes: Bug#184671)
-
- -- David I. Lehn <dlehn@vt.edu>  Fri, 14 Mar 2003 11:12:21 -0500
-
-gst-plugins (0.6.0-3) unstable; urgency=low
-
-  * debian/build-deps.in:
-    * Add libartsc0-dev so artsc-config is present so arts[d] plugins get
-      built so the arts[d] packages actually include the arts[d] plugins
-      (Closes: Bug#181438)
-    * Update JACK dependency to 0.50.0
-
- -- David I. Lehn <dlehn@vt.edu>  Fri,  7 Mar 2003 23:51:46 -0500
-
-gst-plugins (0.6.0-2) unstable; urgency=low
-
-  * NMU (with maintainer's permission)
-  * Change libarts-dev build-dep to libarts1-dev (Closes: #180537)
-
- -- David Schleef <ds@schleef.org>  Mon, 10 Feb 2003 21:33:47 -0800
-
-gst-plugins (0.6.0-1) unstable; urgency=low
-
-  * New upstream
-
- -- David I. Lehn <dlehn@vt.edu>  Sat,  1 Feb 2003 21:51:54 -0500
-
-gst-plugins (0.5.2.3-1) unstable; urgency=low
-
-  * New upstream
-
- -- David I. Lehn <dlehn@vt.edu>  Thu, 30 Jan 2003 23:52:08 -0500
-
-gst-plugins (0.5.2.2-1) unstable; urgency=low
-
-  * New upstream
-    * pre-release for 0.6.0
-  * debian/gstreamer-gconf.install:
-    * add gstreamer-gconf-*.pc
-  * debian/gstreamer-misc.install:
-    * remove libgstaviparse.so
-
- -- David I. Lehn <dlehn@vt.edu>  Wed, 29 Jan 2003 15:07:06 -0500
-
-gst-plugins (0.5.2-1) unstable; urgency=low
-
-  * New upstream
-  * debian/build-deps.in:
-    - Update swfdec dependency to 0.2.0
-  * debian/gstreamer-misc.install:
-    - add libgstaviparse.so
-
- -- David I. Lehn <dlehn@vt.edu>  Thu, 23 Jan 2003 22:17:31 -0500
-
-gst-plugins (0.5.1-1) unstable; urgency=low
-
-  * New upstream
-  * Update GStreamer dependency to 0.5.1
-  * Update JACK dependency to 0.44.0
-  * Remove gstreamer-avifile package (avifile not supported on many
-    architectures and upstream is deprecating it in favor of ffmpeg)
-  * Add support for building unsupported plugin packages (avifile, lame, etc)
-  * Tighten shlib deps for gstreamer-plugin-libs and gstreamer-gconf packages
-    (may split off true lib* packages eventually, was trying to avoid even
-    more packages)
-  * gstreamer-misc: add oneton and vbidec
-  * Rebuild for newer sid libs (Closes: Bug#177410)
-  * Various small fixes from CVS
-
- -- David I. Lehn <dlehn@vt.edu>  Mon, 20 Jan 2003 11:57:26 -0500
-
-gst-plugins (0.5.0-1) unstable; urgency=low
-
-  * New upstream
-  * Update libpng dependency to libpng12-0-dev
-  * Patch from CVS to support mpeg2dec 0.3.1
-  * Patch from CVS to improve X error handling and remote X usage
-  * gstreamer-plugin-libs[-dev]: add media-info lib
-  * gstreamer-misc: add png plugin
-  * Use swfdec 0.1.3 API: s/swf_init/swfdec_decoder_new/ to avoid symbol
-    conflicts with avifile plugin
-
- -- David I. Lehn <dlehn@vt.edu>  Tue, 17 Dec 2002 20:27:42 -0500
-
-gst-plugins (0.4.2-2) unstable; urgency=low
-
-  * Update JACK dependency to 0.40.1
-  * Apply gst-launch-ext perlism patch (Closes: #170736)
-  * Apply patch from Erik Meusel <meusel@codixx.de> to allow building with
-    other KDE arts packages (Closes: Bug#167538)
-  * Update mpeg2dec dependency to 0.3.0, convert over to gstmpeg2deccvs plugin
-    code, and adjust mpeg2dec check
-  * Add Provides: for virtual gstreamer-{audio,video}sink packages to make it
-    easier for applications to ensure output sinks are available.  This isn't
-    foolproof and it's possible that a rare user might not need the standard
-    packaged audio/video sinks.  For now those users can use the "equivs"
-    package to get around the problem. (Closes: Bug#169968)
-
- -- David I. Lehn <dlehn@vt.edu>  Wed,  4 Dec 2002 02:25:41 -0500
-
-gst-plugins (0.4.2-1.1) unstable; urgency=low
-
-  * NMU
-  * Depend on swfdec-0.1.2-3, since it had a bug.
-
- -- David Schleef <ds@schleef.org>  Tue, 12 Nov 2002 17:43:48 -0800
-
-gst-plugins (0.4.2-1) unstable; urgency=low
-
-  * New upstream
-  * Add libpng2-dev to Build-Depends for snapshot
-  * Add smpte, snapshot, and wavenc to gstreamer-misc
-  * Add video and play libs to gstreamer-plugin-libs{-dev}
-  * Add gstreamer-swfdec plugin package
-  * Add hack to swfdec plugin to not segfault when avifile also loaded due to
-    symbols conflicts.  This annoyance will spew errors during gst-compprep
-    and probably will cause errors in apps that use both swfdec and avifile.
-  * Tighten dependency on libgstreamer until upstream code can deal with
-    multiple plugin versions and upgrades better
-  * Move gstreamer-plugin-apps to Section: utils from x11
-
- -- David I. Lehn <dlehn@vt.edu>  Wed,  6 Nov 2002 21:41:01 -0500
-
-gst-plugins (0.4.1-1) unstable; urgency=low
-
-  * New upstream
-  * Update FLAC dependency to 1.0.4 and add support patch from CVS
-  * Rebuild for libflac4 (Closes: Bug#163549)
-  * Build gconf code as a library rather than a plugin
-  * Improved plugin descriptions
-  * Added to -misc: cdplayer, videocrop, videotestsrc, mixmatrix
-  * Add autotools-dev to Build-Depends
-  * Update config.{guess,sub}
-
- -- David I. Lehn <dlehn@vt.edu>  Mon,  7 Oct 2002 17:51:43 -0400
-
-gst-plugins (0.4.0.2-cvs20020919-1) unstable; urgency=low
-
-  * CVS snapshot, release branch
-  * gstreamer-gconf.files: libgstgconf.so moved to /usr/lib
-  * added control.in, build-deps, and mk.control script.  Edit control.in
-    and/or build-deps, and run 'debian/rules debian/control' from toplevel
-    directory to recreate debian/control.  This should make it a lot
-    easier to diff build dependencies.
-
- -- David Schleef <ds@schleef.org>  Thu, 19 Sep 2002 15:18:41 -0700
-
-gst-plugins (0.4.0-5) unstable; urgency=low
-
-  * Update Build-Depends
-  * Use pkg-config checking vs m4 macros for libdv
-
- -- David I. Lehn <dlehn@vt.edu>  Fri, 23 Aug 2002 10:33:29 -0400
-
-gst-plugins (0.4.0-4) unstable; urgency=low
-
-  * Fixes from CVS for gstgnomevfssrc.c and endian issue in vorbisfile.c
-
- -- David I. Lehn <dlehn@vt.edu>  Fri,  2 Aug 2002 20:51:38 -0400
-
-gst-plugins (0.4.0-3) unstable; urgency=low
-
-  * Add ladspa-sdk to Build-Depends
-  * Removed qcam plugin from -misc.
-    It's i386 only and probably not widely used.  Will figure out how to
-    package in the future if someone needs it.
-
- -- David I. Lehn <dlehn@vt.edu>  Mon, 29 Jul 2002 16:32:33 -0400
-
-gst-plugins (0.4.0-2) unstable; urgency=low
-
-  * Clean up the Build-Depends:
-    - stricter versioning
-    - remove gnome deps (used for examples which are not build now)
-  * Fix segfault in vorbis.m4 check
-
- -- David I. Lehn <dlehn@vt.edu>  Mon, 29 Jul 2002 10:47:12 -0400
-
-gst-plugins (0.4.0-1) unstable; urgency=low
-
-  * New upstream
-  * FLAC compile fixes from CVS
-  * DV comiled fixes
-  * Upated ltmain hack
-  * autogen.sh with more recent tools
-  * Update config.{guess,sub}
-  * Added plugin packages: -gconf, -http, -jack, -dv
-  * Added dvdnav plugin to -dvd
-  * Removed osshelper plugin from -oss
-  * Added xvideosink back to -x
-  * Added effectv, filter, and qtdemux plugins to -misc
-  * Rename gstreamer-lib-misc{-dev} to gstreamer-plugin-libs{-dev} to match
-    gstreamer core.
-  * Added gstreamer-plugin-apps package for a lonely 2 scripts
-  * Renamed gstreamer-all to gstreamer-plugins
-
- -- David I. Lehn <dlehn@vt.edu>  Tue, 16 Jul 2002 02:10:07 -0400
-
-gst-plugins (0.3.4-2) unstable; urgency=low
-
-  * Rebuild for new avifile
-
- -- David I. Lehn <dlehn@vt.edu>  Wed, 24 Apr 2002 14:06:46 -0400
-
-gst-plugins (0.3.4-1) unstable; urgency=low
-
-  * New upstream
-  * Fix mpeg2dec.m4 to use newer mpeg2dec libs
-
- -- David I. Lehn <dlehn@vt.edu>  Mon, 15 Apr 2002 03:34:21 -0400
-
-gst-plugins (0.3.3-2) unstable; urgency=low
-
-  * Port a52dec plugin to 0.7.3 API (applied upstream)
-  * Use a52dec packages in Debian vs current external ones
-    * This switches a52dec plugin to static linking
-  * Remove LAME support
-    * No LAME packages in Debian to depend on
-    * Added explanation in README.Debian since this will likely
-      cause no end of "Why is there no LAME plugin?"
-  * Depend on and rebuild for mpeg2dec 0.2.1
-  * Depend on and rebuild for glib 2.0
-  * Remove gtk from Build-Depends: (not needed for the built plugins)
-
- -- David I. Lehn <dlehn@vt.edu>  Sat, 23 Mar 2002 17:52:03 -0500
-
-gst-plugins (0.3.3-1) unstable; urgency=low
-
-  * New upstream version
-  * SDL fixed upstream, remove patch
-  * Require libid3tag for mad support
-  * Remove xvideosink from gstreamer-x package in favor of videosink
-    Needed to be removed due to symbol conflicts with videosink
-  * Sync with upstream changes:
-    * Added videosink to gstreamer-x package
-    * parseau renamed to auparse in -misc
-    * Added various plugins to -misc: goom, monoscope, modplug, ...
-  * Note: new upstream scripts gst-launch-ext and gst-visualise not
-    packaged yet
-
- -- David I. Lehn <dlehn@vt.edu>  Thu, 21 Mar 2002 02:06:21 -0500
-
-gst-plugins (0.3.2-3) unstable; urgency=low
-
-  * Rebuild for glib/gtk 1.3.15
-
- -- David I. Lehn <dlehn@vt.edu>  Mon, 25 Feb 2002 00:06:51 -0500
-
-gst-plugins (0.3.2-2) unstable; urgency=low
-
-  * Build against liblinc1 and newer gnomevfs
-
- -- David I. Lehn <dlehn@vt.edu>  Sun, 17 Feb 2002 15:52:57 -0500
-
-gst-plugins (0.3.2-1) unstable; urgency=low
-
-  * New upstream release
-  * Many diffs merged upstream
-  * Unversioned plugins upstream, just packaging .so (no .la, .a)
-  * Added cdxa plugin to -misc
-  * Various plugins in -misc moved around and merged upstream
-
- -- David I. Lehn <dlehn@vt.edu>  Fri, 15 Feb 2002 21:54:27 -0500
-
-gst-plugins (0.3.1-4) unstable; urgency=low
-
-  * Rebuild for glib/gtk 1.3.13
-
- -- David I. Lehn <dlehn@vt.edu>  Wed,  6 Feb 2002 02:16:16 -0500
-
-gst-plugins (0.3.1-3) unstable; urgency=low
-
-  * Fix arts symbol problem (add -lartsflow -lartsflow_idl)
-  * Replace m4/gst-sdl.m4 with Debian's sdl.m4
-  * Use SDL_LIBS_FOR_PLUGINS instead of SDL_LIBS
-
- -- David I. Lehn <dlehn@vt.edu>  Wed, 23 Jan 2002 12:37:00 -0500
-
-gst-plugins (0.3.1-2) unstable; urgency=low
-
-  * Rebuild against fixed gstreamer.pc in libgst-dev 0.3.1-2
-    Should just link to libxml2 now rather than v1 and v2
-
- -- David I. Lehn <dlehn@vt.edu>  Wed, 23 Jan 2002 02:29:49 -0500
-
-gst-plugins (0.3.1-1) unstable; urgency=low
-
-  * Upstream split plugins into new package
-  * Upstream removed mpg123 plugin - use mad plugin
-  * Upstream removed ac3dec plugin - use a52dec
-  * Added -lib-misc and -lib-misc-dev packages for
-    library plugins and headers
-  * Patch to link all plugins to GST_LIBS
-
- -- David I. Lehn <dlehn@vt.edu>  Fri, 11 Jan 2002 11:22:01 -0500
-
-gstreamer (0.3.0-3) unstable; urgency=low
-
-  * Remove upstream ChangeLog from packages: 128k changelog.gz per
-    plugin package for 40 packages is too much
-
- -- David I. Lehn <dlehn@vt.edu>  Tue, 25 Dec 2001 23:36:28 -0500
-
-gstreamer (0.3.0-2) unstable; urgency=low
-
-  * Fix bug that slipped into 0.3.0: s/aasink/xvideosink/ in
-    gstplay/gstplay.c
-
- -- David I. Lehn <dlehn@vt.edu>  Tue, 25 Dec 2001 17:56:29 -0500
-
-gstreamer (0.3.0-1) unstable; urgency=low
-
-  * New upstream release
-  * Attempt to update various Build-Depends versions
-  * Added plugin packages: -a52dec, -dvd, -mikmod, -sid
-  * Renamed -elements to -core
-  * Added to -core: gstbasicscheduler
-  * Moved from -common to -core: gsttypes, autoplug related
-  * Renamed -common to -misc
-  * Added to -misc: speed, qcam, bytesteram, control, silence, sinesrc,
-    mpegstream, playondemand, resample
-  * Added gstreamer-guilaunch to gstreamer-tools package
-  * Added dependencies on unofficial LAME packages
-  * Use PIC libs for Xv
-  * Disable broken building of PDF/PS docs
-  * Renamed -all-plugins to -all
-  * Disable docs -- too hard to build
-
- -- David I. Lehn <dlehn@vt.edu>  Fri, 21 Dec 2001 12:00:02 -0500
-
-gstreamer (0.2.1-4) unstable; urgency=low
-
-  * Fix some problems reported from lintian 1.20.14:
-    * copyright-lists-upstream-authors-like-dh_make
-    * debian-changelog-file-contains-user-emacs-settings
-  * Patch from CVS to link libgst into plugins
-    Plugins now properly depend on libgst package
-  * Use RedHat Gtk+-1.3 hack to fix relink issues with ltmain.sh
-  * Patch from CVS for xvideosink segfault when no DISPLAY set
-  * Remove builddir references from gstreamer-config.in
-  * Move libgstelements.la from libgst-dev to gstreamer-elements
-
- -- David I. Lehn <dlehn@vt.edu>  Tue, 28 Aug 2001 20:05:28 -0400
-
-gstreamer (0.2.1-3) unstable; urgency=low
-
-  * Update build dependencies to FLAC 1.0
-  * Enable debug features
-  * Fixup broken doc build -scan voodoo with link into .libs/ dir
-
- -- David I. Lehn <dlehn@vt.edu>  Sun,  5 Aug 2001 23:04:28 -0400
-
-gstreamer (0.2.1-2) unstable; urgency=low
-
-  * Fix lib deps: run debhelper tools in the right order
-  * Added arts dir to Makefile.am SUBDIRS so it builds again
-  * Changed libmpeg2dec to libgstmpeg2dec to avoid naming issues
-    when using -lmpeg2dec
-  * Updated system_encode/ with CVS segfaulter bug fix
-
- -- David I. Lehn <dlehn@vt.edu>  Thu, 19 Jul 2001 15:47:24 -0400
-
-gstreamer (0.2.1-1) unstable; urgency=low
-
-  * New upstream 0.2.1: "Return of the Sedi Master"
-  * New plugin packages: -festival, -flac, -avifile, -x
-  * New plugins in -common: chart, deinterlace, udp
-  * Added some post-0.2.1 fixes for FLAC, build system, ALSA
-
- -- David I. Lehn <dlehn@vt.edu>  Thu, 28 Jun 2001 20:15:15 -0400
-
-gstreamer (0.2.0-6) unstable; urgency=low
-
-  * Move -compprep to -runtime and call it same places as -register
-  * Do -register and -compprep in postrm instead of prerm
-  * Make -arts plugin actually build all the source (sent upstream)
-  * Purge of -runtime removes /etc/gstreamer
-
- -- David I. Lehn <dlehn@vt.edu>  Tue, 19 Jun 2001 13:09:32 -0400
-
-gstreamer (0.2.0-5) unstable; urgency=low
-
-  * Added element package dependencies to libgstmediaplay0
-
- -- David I. Lehn <dlehn@vt.edu>  Mon, 18 Jun 2001 11:18:53 -0400
-
-gstreamer (0.2.0-4) unstable; urgency=low
-
-  * Add --gst-mask=0 to -runtime.postinst
-
- -- David I. Lehn <dlehn@vt.edu>  Fri, 15 Jun 2001 11:47:24 -0400
-
-gstreamer (0.2.0-3) unstable; urgency=low
-
-  * Fix the plugin control file symlink creation
-  * Add audiofile to Build-Depends
-
- -- David I. Lehn <dlehn@vt.edu>  Fri, 15 Jun 2001 05:22:28 -0400
-
-gstreamer (0.2.0-2) unstable; urgency=low
-
-  * Fixed ALSA checks to not include -lasound in -every- link
-  * Update LAME plugin to use latest CVS API
-  * Removed OSS src/sink from -common.files (was in -oss too)
-  * Swapped -arts.files and -artsd.files contents
-
- -- David I. Lehn <dlehn@vt.edu>  Fri, 15 Jun 2001 04:02:21 -0400
-
-gstreamer (0.2.0-1) unstable; urgency=low
-
-  * Added gstreamer-compprep manpage
-  * Upgrade to 0.2.0
-
- -- David I. Lehn <dlehn@vt.edu>  Thu,  7 Jun 2001 12:53:59 -0400
-
-gstreamer (0.2.0-0.3) unstable; urgency=low
-
-  * GStreamer 0.2.0-pre3
-
- -- David I. Lehn <dlehn@vt.edu>  Wed,  6 Jun 2001 15:09:59 -0400
-
-gstreamer (0.2.0-0.2) unstable; urgency=low
-
-  * GStreamer 0.2.0-pre2 + CVS 20010604
-  * Added -artsd (vs -arts), -audiofile, -gnomevfs, -gsm, -jpeg,
-    -oss, and -sdl plugin packages
-  * Added osshelper lib to oss package
-  * Added more AVI related plugins and autoplug libs to -common
-  * Added pkgconfig file to libgst-dev
-  * Added gstreamer-all-plugins pseudo package that depends on
-    all other plugin pacakges
-
- -- David I. Lehn <dlehn@vt.edu>  Mon,  4 Jun 2001 17:33:20 -0400
-
-gstreamer (0.2.0-0.1) unstable; urgency=low
-
-  * GStreamer 0.2.0-pre1
-
- -- David I. Lehn <dlehn@vt.edu>  Thu, 31 May 2001 17:16:23 -0400
-
-gstreamer (0.1.1.20010504-1) unstable; urgency=low
-
-  * Latest CVS code
-
- -- David I. Lehn <dlehn@vt.edu>  Fri,  4 May 2001 21:48:45 -0400
-
-gstreamer (0.1.1.20010430-2) unstable; urgency=low
-
-  * Added -colorspace package for Hermes dependent conversion
-  * Added -arts package for aRts sink
-
- -- David I. Lehn <dlehn@vt.edu>  Tue,  1 May 2001 19:46:08 -0400
-
-gstreamer (0.1.1.20010430-1) unstable; urgency=low
-
-  * Latest CVS code
-  * Added -aa package for aasink output
-  * Added -mad package for mad mp3 decoder
-
- -- David I. Lehn <dlehn@vt.edu>  Mon, 30 Apr 2001 18:25:52 -0400
-
-gstreamer (0.1.1.20010320-1) unstable; urgency=low
-
-  * Latest CVS code
-  * enable main docs
-  * disable broken plugin docs with new option
-
- -- David I. Lehn <dlehn@vt.edu>  Tue, 20 Mar 2001 18:15:19 -0500
-
-gstreamer (0.1.1.20010315-1) unstable; urgency=low
-
-  * Latest CVS code
-  * Added man pages
-  * Split mpeg2dec to seperate plugin
-  * libgst Architectures updated to cothread supported archs
-
- -- David I. Lehn <dlehn@vt.edu>  Thu, 15 Mar 2001 20:17:19 -0500
-
-gstreamer (0.1.1-1) unstable; urgency=low
-
-  * New upstream release
-  * disable docs build, broken at the momemnt
-
- -- David I. Lehn <dlehn@vt.edu>  Sun, 25 Feb 2001 17:58:25 -0500
-
-gstreamer (0.1.0-2) unstable; urgency=low
-
-  * debian/rules: call configure instead of autogen.sh
-
- -- David I. Lehn <dlehn@vt.edu>  Sat, 24 Feb 2001 18:31:36 -0500
-
-gstreamer (0.1.0-1) unstable; urgency=low
-
-  * Initial Release.
+ -- Coral <coral-support@google.com>  Thu, 06 Jun 2019 17:38:43 -0700
 
- -- David I. Lehn <dlehn@vt.edu>  Mon, 15 Jan 2001 18:25:18 -0500
diff --git a/debian/control b/debian/control
index 33e5f22..1000a74 100644
--- a/debian/control
+++ b/debian/control
@@ -1,14 +1,9 @@
-Source: gst-plugins-good1.0
+Source: mtk-gst-plugins-good
 Section: libs
 Priority: optional
-Maintainer: Maintainers of GStreamer packages <gst-plugins-good1.0@packages.debian.org>
-Uploaders: Loic Minier <lool@dooz.org>,
-           Sebastian Dröge <slomo@debian.org>,
-           Sjoerd Simons <sjoerd@debian.org>
-Build-Depends: libgstreamer1.0-dev (>= 1.14.4),  libraw1394-dev (>= 2.0.0) [linux-any] , libiec61883-dev (>= 1.0.0) [linux-any] , libavc1394-dev [linux-any] , libv4l-dev [linux-any] , libgudev-1.0-dev (>= 143) [linux-any], libgstreamer-plugins-base1.0-dev (>= 1.14.4-2+mtk), autotools-dev, dh-autoreconf, automake (>= 1.14), autoconf (>= 2.69), libtool (>= 2.2.6), autopoint (>= 0.17), cdbs (>= 0.4.93), debhelper (>= 9), dpkg-dev (>= 1.15.1), pkg-config (>= 0.11.0), libglib2.0-dev (>= 2.40), liborc-0.4-dev (>= 1:0.4.17), libcairo2-dev (>= 1.10.0), libcaca-dev, libspeex-dev (>= 1.1.6), libpng-dev, libshout3-dev, libjpeg-dev, libaa1-dev (>= 1.4p5), libflac-dev (>= 1.1.4), libdv4-dev | libdv-dev, libxdamage-dev, libxext-dev, libxfixes-dev, libxv-dev, libgtk-3-dev (>= 3.15), libtag1-dev (>= 1.5), libwavpack-dev (>= 4.60), gstreamer1.0-plugins-base (>= 1.14.4), libsoup2.4-dev (>= 2.48), libpulse-dev (>= 2.0), libbz2-dev, libjack-jackd2-dev, libvpx-dev (>= 1.3.0), libmp3lame-dev, libmpg123-dev (>= 1.13), libtwolame-dev (>= 0.3.10)
+Maintainer: Coral <coral-support@google.com>
+Build-Depends: libgstreamer1.0-dev (>= 1.14.4),  libraw1394-dev (>= 2.0.0) [linux-any] , libiec61883-dev (>= 1.0.0) [linux-any] , libavc1394-dev [linux-any] , libv4l-dev [linux-any] , libgudev-1.0-dev (>= 143) [linux-any], libgstreamer-plugins-base1.0-dev (>= 1.14.4), autotools-dev, dh-autoreconf, automake (>= 1.14), autoconf (>= 2.69), libtool (>= 2.2.6), autopoint (>= 0.17), cdbs (>= 0.4.93), debhelper (>= 9), dpkg-dev (>= 1.15.1), pkg-config (>= 0.11.0), libglib2.0-dev (>= 2.40), liborc-0.4-dev (>= 1:0.4.17), libcairo2-dev (>= 1.10.0), libcaca-dev, libspeex-dev (>= 1.1.6), libpng-dev, libshout3-dev, libjpeg-dev, libaa1-dev (>= 1.4p5), libflac-dev (>= 1.1.4), libdv4-dev | libdv-dev, libxdamage-dev, libxext-dev, libxfixes-dev, libxv-dev, libgtk-3-dev (>= 3.15), libtag1-dev (>= 1.5), libwavpack-dev (>= 4.60), gstreamer1.0-plugins-base (>= 1.14.4), libsoup2.4-dev (>= 2.48), libpulse-dev (>= 2.0), libbz2-dev, libjack-jackd2-dev, libvpx-dev (>= 1.3.0), libmp3lame-dev, libmpg123-dev (>= 1.13), libtwolame-dev (>= 0.3.10), libgles2-mesa-dev, libgl1-mesa-dev
 Standards-Version: 3.9.8
-Vcs-Git: https://salsa.debian.org/gstreamer-team/gst-plugins-good1.0.git
-Vcs-Browser: https://salsa.debian.org/gstreamer-team/gst-plugins-good1.0/
 Homepage: https://gstreamer.freedesktop.org
 
 Package: gstreamer1.0-pulseaudio
diff --git a/debian/control.in b/debian/control.in
deleted file mode 100644
index afef58c..0000000
--- a/debian/control.in
+++ /dev/null
@@ -1,162 +0,0 @@
-Source: gst-plugins-good@GST_ABI@
-Section: libs
-Priority: optional
-Maintainer: Maintainers of GStreamer packages <gst-plugins-good1.0@packages.debian.org>
-Uploaders: Loic Minier <lool@dooz.org>,
-           Sebastian Dröge <slomo@debian.org>,
-           Sjoerd Simons <sjoerd@debian.org>
-Build-Depends: BUILDDEPS
-Standards-Version: 3.9.3
-Vcs-Git: https://salsa.debian.org/gstreamer-team/gst-plugins-good1.0.git
-Vcs-Browser: https://salsa.debian.org/gstreamer-team/gst-plugins-good1.0/
-Homepage: https://gstreamer.freedesktop.org
-
-Package: @GST_PKGNAME@-plugins-good-doc
-Architecture: all
-Multi-Arch: foreign
-Section: doc
-Depends: gstreamer@GST_ABI@-doc,
-         gstreamer@GST_ABI@-plugins-base-doc,
-         ${misc:Depends}
-Description: GStreamer documentation for plugins from the "good" set
- GStreamer is a streaming media framework, based on graphs of filters
- which operate on media data.  Applications using this library can do
- anything from real-time sound processing to playing videos, and just
- about anything else media-related.  Its plugin-based architecture means
- that new data types or processing capabilities can be added simply by
- installing new plug-ins.
- .
- This package contains documentation for plugins from the "good" set,
- a set of good-quality plug-ins under the LGPL license.
-
-Package: @GST_PKGNAME@-pulseaudio
-Architecture: any
-Multi-Arch: same
-Section: sound
-Depends: ${misc:Depends},
-         ${shlibs:Depends}
-XB-GStreamer-Version: ${gstreamer:Version}
-XB-GStreamer-Elements: ${gstreamer:Elements}
-XB-GStreamer-URI-Sources: ${gstreamer:URISources}
-XB-GStreamer-URI-Sinks: ${gstreamer:URISinks}
-XB-GStreamer-Encoders: ${gstreamer:Encoders}
-XB-GStreamer-Decoders: ${gstreamer:Decoders}
-Provides: ${gstreamer:Provides}
-Description: GStreamer plugin for PulseAudio
- GStreamer is a streaming media framework, based on graphs of filters
- which operate on media data.  Applications using this library can do
- anything from real-time sound processing to playing videos, and just
- about anything else media-related.  Its plugin-based architecture means
- that new data types or processing capabilities can be added simply by
- installing new plug-ins.
- .
- This package contains the GStreamer plugin for PulseAudio, a sound server
- for POSIX and WIN32 systems.
-
-Package: @GST_PKGNAME@-qt5
-#Architecture: any
-Architecture: any-amd64 any-arm64 any-i386 any-mips any-mips64el any-mipsel any-ppc64el any-s390x any-alpha any-hppa any-ia64 any-m68k any-powerpc any-powerpcspe any-ppc64 any-riscv64 any-sh4 any-sparc64 any-x32
-Multi-Arch: same
-Section: graphics
-Depends: ${misc:Depends},
-         ${shlibs:Depends}
-XB-GStreamer-Version: ${gstreamer:Version}
-XB-GStreamer-Elements: ${gstreamer:Elements}
-XB-GStreamer-URI-Sources: ${gstreamer:URISources}
-XB-GStreamer-URI-Sinks: ${gstreamer:URISinks}
-XB-GStreamer-Encoders: ${gstreamer:Encoders}
-XB-GStreamer-Decoders: ${gstreamer:Decoders}
-Provides: ${gstreamer:Provides}
-Replaces: gstreamer1.0-plugins-bad (<< 1.13.1)
-Breaks: gstreamer1.0-plugins-bad (<< 1.13.1)
-Description: GStreamer plugin for Qt5
- GStreamer is a streaming media framework, based on graphs of filters
- which operate on media data.  Applications using this library can do
- anything from real-time sound processing to playing videos, and just
- about anything else media-related.  Its plugin-based architecture means
- that new data types or processing capabilities can be added simply by
- installing new plug-ins.
- .
- This package contains the GStreamer plugin for Qt5.
-
-Package: @GST_PKGNAME@-gtk3
-Architecture: any
-Multi-Arch: same
-Section: graphics
-Depends: ${misc:Depends},
-         ${shlibs:Depends}
-XB-GStreamer-Version: ${gstreamer:Version}
-XB-GStreamer-Elements: ${gstreamer:Elements}
-XB-GStreamer-URI-Sources: ${gstreamer:URISources}
-XB-GStreamer-URI-Sinks: ${gstreamer:URISinks}
-XB-GStreamer-Encoders: ${gstreamer:Encoders}
-XB-GStreamer-Decoders: ${gstreamer:Decoders}
-Provides: ${gstreamer:Provides}
-Replaces: gstreamer1.0-plugins-bad (<< 1.13.1)
-Breaks: gstreamer1.0-plugins-bad (<< 1.13.1)
-Description: GStreamer plugin for GTK+3
- GStreamer is a streaming media framework, based on graphs of filters
- which operate on media data.  Applications using this library can do
- anything from real-time sound processing to playing videos, and just
- about anything else media-related.  Its plugin-based architecture means
- that new data types or processing capabilities can be added simply by
- installing new plug-ins.
- .
- This package contains the GStreamer plugin for GTK+3.
-
-Package: @GST_PKGNAME@-plugins-good
-Architecture: any
-Multi-Arch: same
-Section: libs
-Depends: ${misc:Depends},
-         ${shlibs:Depends},
-         @GST_PKGNAME@-pulseaudio | @GST_PKGNAME@-audiosink,
-         gstreamer@GST_ABI@-plugins-base,
-Recommends: @GST_PKGNAME@-x
-Replaces: gstreamer1.0-plugins-bad (<< 1.13.1),
-          gstreamer1.0-plugins-ugly (<< 1.13.1)
-Breaks: gstreamer1.0-plugins-bad (<< 1.13.1),
-        gstreamer1.0-plugins-ugly (<< 1.13.1)
-XB-GStreamer-Version: ${gstreamer:Version}
-XB-GStreamer-Elements: ${gstreamer:Elements}
-XB-GStreamer-URI-Sources: ${gstreamer:URISources}
-XB-GStreamer-URI-Sinks: ${gstreamer:URISinks}
-XB-GStreamer-Encoders: ${gstreamer:Encoders}
-XB-GStreamer-Decoders: ${gstreamer:Decoders}
-Provides: ${gstreamer:Provides}
-Description: GStreamer plugins from the "good" set
- GStreamer is a streaming media framework, based on graphs of filters
- which operate on media data.  Applications using this library can do
- anything from real-time sound processing to playing videos, and just
- about anything else media-related.  Its plugin-based architecture means
- that new data types or processing capabilities can be added simply by
- installing new plug-ins.
- .
- This package contains the GStreamer plugins from the "good" set, a set
- of good-quality plug-ins under the LGPL license.
-
-Package: @GST_PKGNAME@-plugins-good-dbg
-Architecture: any
-Multi-Arch: same
-Section: debug
-Priority: extra
-Depends: @GST_PKGNAME@-plugins-good (= ${binary:Version}),
-         @GST_PKGNAME@-pulseaudio (= ${binary:Version}),
-         @GST_PKGNAME@-qt5 (= ${binary:Version}) [any-amd64 any-arm64 any-i386 any-mips any-mips64el any-mipsel any-ppc64el any-s390x any-alpha any-hppa any-ia64 any-m68k any-powerpc any-powerpcspe any-ppc64 any-riscv64 any-sh4 any-sparc64 any-x32],
-         @GST_PKGNAME@-gtk3 (= ${binary:Version}),
-         ${misc:Depends}
-Replaces: gstreamer1.0-plugins-bad (<< 1.13.1)
-Breaks: gstreamer1.0-plugins-bad (<< 1.13.1)
-Description: GStreamer plugins from the "good" set
- GStreamer is a streaming media framework, based on graphs of filters
- which operate on media data.  Applications using this library can do
- anything from real-time sound processing to playing videos, and just
- about anything else media-related.  Its plugin-based architecture means
- that new data types or processing capabilities can be added simply by
- installing new plug-ins.
- .
- This package contains unstripped shared libraries. It is provided primarily
- to provide a backtrace with names in a debugger, this makes it somewhat
- easier to interpret core dumps. The libraries are installed in
- /usr/lib/debug and are automatically used by gdb.
-
diff --git a/debian/gstreamer-plugins-good-doc.install b/debian/gstreamer-plugins-good-doc.install
deleted file mode 100644
index 133e6a2..0000000
--- a/debian/gstreamer-plugins-good-doc.install
+++ /dev/null
@@ -1 +0,0 @@
-debian/tmp/usr/share/gtk-doc
diff --git a/debian/patches/0001-mtk.patch b/debian/patches/0001-mtk.patch
deleted file mode 100644
index a1aa340..0000000
--- a/debian/patches/0001-mtk.patch
+++ /dev/null
@@ -1,2518 +0,0 @@
-From 1d8405c4d342d73d844e326d51cca559cce3accc Mon Sep 17 00:00:00 2001
-From: Qian Hu <Qian.Hu@mediatek.com>
-Date: Mon, 23 Sep 2019 19:13:31 +0800
-Subject: [PATCH] update gstreamer good to 1.14.4
-
-Signed-off-by: Qian Hu <Qian.Hu@mediatek.com>
----
- ext/pulse/pulsesink.c         |   7 +
- gst/avi/gstavidemux.c         | 120 +++++++-
- gst/avi/gstavidemux.h         |   4 +
- gst/isomp4/qtdemux.c          |   8 +-
- gst/matroska/matroska-demux.c |  15 +-
- sys/v4l2/Makefile.am          |   8 +-
- sys/v4l2/ext/videodev2.h      |  19 ++
- sys/v4l2/gstv4l2.c            |  27 +-
- sys/v4l2/gstv4l2bufferpool.c  |   5 +-
- sys/v4l2/gstv4l2mtkjpegdec.c  | 183 ++++++++++++
- sys/v4l2/gstv4l2mtkjpegdec.h  |  63 ++++
- sys/v4l2/gstv4l2mtkvpudec.c   | 181 ++++++++++++
- sys/v4l2/gstv4l2mtkvpudec.h   |  63 ++++
- sys/v4l2/gstv4l2object.c      | 657 +++++++++++++++++++++++++++++++++++++++++-
- sys/v4l2/gstv4l2object.h      |  21 ++
- sys/v4l2/gstv4l2src.c         |   2 +
- sys/v4l2/gstv4l2videodec.c    | 237 ++++++++++++++-
- sys/v4l2/gstv4l2videoenc.h    |  22 +-
- sys/v4l2/v4l2_calls.c         |  29 +-
- sys/v4l2/v4l2_calls.h         | 138 +++++++++
- 20 files changed, 1775 insertions(+), 36 deletions(-)
- create mode 100644 sys/v4l2/gstv4l2mtkjpegdec.c
- create mode 100644 sys/v4l2/gstv4l2mtkjpegdec.h
- create mode 100644 sys/v4l2/gstv4l2mtkvpudec.c
- create mode 100644 sys/v4l2/gstv4l2mtkvpudec.h
- create mode 100644 sys/v4l2/v4l2_calls.h
-
-diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c
-index 521c4a6..d4c1ae2 100644
---- a/ext/pulse/pulsesink.c
-+++ b/ext/pulse/pulsesink.c
-@@ -1265,6 +1265,13 @@ gst_pulseringbuffer_pause (GstAudioRingBuffer * buf)
-   GST_DEBUG_OBJECT (psink, "pausing and corking");
-   /* make sure the commit method stops writing */
-   pbuf->paused = TRUE;
-+
-+   if (pbuf->in_commit) {
-+   /* we are waiting in a commit, signal */
-+   GST_DEBUG_OBJECT (psink, "signal commit before pause");
-+   pa_threaded_mainloop_signal (mainloop, 0);
-+  }
-+
-   res = gst_pulsering_set_corked (pbuf, TRUE, TRUE);
-   if (pbuf->in_commit) {
-     /* we are waiting in a commit, signal */
-diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
-index c02ee89..f723509 100644
---- a/gst/avi/gstavidemux.c
-+++ b/gst/avi/gstavidemux.c
-@@ -945,6 +945,22 @@ gst_avi_demux_handle_src_event (GstPad * pad, GstObject * parent,
- 
- /* streaming helper (push) */
- 
-+static GstBuffer *
-+gst_avi_demux_get_frame_header (GstAviDemux * avi)
-+{
-+  GstBuffer *buffer;
-+  GstMapInfo map;
-+
-+  buffer = gst_buffer_new_and_alloc (4);
-+
-+  gst_buffer_map (buffer, &map, GST_MAP_WRITE);
-+  GST_WRITE_UINT32_BE (map.data, 0x0000010D);
-+  gst_buffer_unmap (buffer, &map);
-+
-+  return buffer;
-+}
-+
-+
- /*
-  * gst_avi_demux_peek_chunk_info:
-  * @avi: Avi object
-@@ -1965,7 +1981,23 @@ gst_avi_demux_check_caps (GstAviDemux * avi, GstAviStream * stream,
-       gst_structure_remove_field (s, "palette_data");
-       return caps;
-     }
--  } else if (!gst_structure_has_name (s, "video/x-h264")) {
-+    }
-+  else if (gst_structure_has_name (s, "video/x-wmv")) {
-+    if (gst_structure_has_field_typed (s, "format", G_TYPE_STRING)) {
-+      gchar *format_value;
-+      gst_structure_get (s, "format", G_TYPE_STRING,
-+          &format_value, NULL);
-+
-+      GST_DEBUG_OBJECT (avi, "format=%s", format_value);
-+      if ((!strcmp(format_value, "WVC1")) || (!strcmp(format_value, "wvc1"))
-+            || (!strcmp(format_value, "WMV3")) || (!strcmp(format_value, "wmv3"))) {
-+        GST_DEBUG_OBJECT (avi, "remove field");
-+        gst_structure_remove_field (s, "codec_data");
-+      }
-+    }
-+    GST_DEBUG_OBJECT (avi, "after checking caps %" GST_PTR_FORMAT, caps);
-+  }
-+  else if (!gst_structure_has_name (s, "video/x-h264")) {
-     return caps;
-   }
- 
-@@ -2125,8 +2157,42 @@ gst_avi_demux_parse_stream (GstAviDemux * avi, GstBuffer * buf)
-         switch (stream->strh->type) {
-           case GST_RIFF_FCC_vids:
-             stream->is_vbr = TRUE;
-+			/*read videostream header*/
-+        stream->video_header = gst_buffer_copy_region (sub, GST_BUFFER_COPY_ALL,
-+               0, sizeof (gst_riff_strf_vids));
-+        stream->video_header_send_flag = TRUE;
-+
-             res = gst_riff_parse_strf_vids (element, sub,
-                 &stream->strf.vids, &stream->extradata);
-+
-+			if (stream->extradata != NULL) {
-+              guint32 fourcc;
-+
-+              fourcc = (stream->strf.vids->compression) ?
-+                stream->strf.vids->compression : stream->strh->fcc_handler;
-+              if ((GST_MAKE_FOURCC ('W', 'V', 'C', '1') == fourcc) || (GST_MAKE_FOURCC ('W', 'M', 'V', '1') == fourcc)
-+                || (GST_MAKE_FOURCC ('W', 'M', 'V', '2') == fourcc) || (GST_MAKE_FOURCC ('W', 'M', 'V', '3') == fourcc)
-+                || (GST_MAKE_FOURCC ('W', 'M', 'V', 'A') == fourcc)) {
-+				GstBuffer  *video_seqheader = NULL;
-+
-+				GstMapInfo map;
-+                                const guint8 *data;
-+                                gsize size = 0;
-+				guint32 ept_header = 0;
-+
-+                                gst_buffer_map (stream->extradata, &map, GST_MAP_READ);
-+				data = map.data;
-+                                size = map.size;
-+				GST_DEBUG_OBJECT (element, "extradata size=%" G_GSIZE_FORMAT, size);
-+
-+				video_seqheader = gst_buffer_copy_region (stream->extradata, GST_BUFFER_COPY_ALL,
-+                                  0, gst_buffer_get_size (stream->extradata));
-+				stream->video_header = gst_buffer_append (stream->video_header, video_seqheader);
-+				stream->ept_header_size = 0;
-+				stream->add_extra_data = FALSE;
-+			  }
-+			}
-+
-             sub = NULL;
-             GST_DEBUG_OBJECT (element, "marking video as VBR, res %d", res);
-             break;
-@@ -5222,6 +5288,7 @@ gst_avi_demux_loop_data (GstAviDemux * avi)
-   GstAviStream *stream;
-   gboolean processed = FALSE;
-   GstBuffer *buf;
-+  GstBuffer *out = NULL;
-   guint64 offset, size;
-   GstClockTime timestamp, duration;
-   guint64 out_offset, out_offset_end;
-@@ -5300,13 +5367,12 @@ gst_avi_demux_loop_data (GstAviDemux * avi)
-     /* mark non-keyframes */
-     if (keyframe || stream->is_raw) {
-       GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
--      GST_BUFFER_PTS (buf) = timestamp;
-     } else {
-       GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
--      GST_BUFFER_PTS (buf) = GST_CLOCK_TIME_NONE;
-     }
- 
-     GST_BUFFER_DTS (buf) = timestamp;
-+	GST_BUFFER_PTS (buf) = timestamp;
- 
-     GST_BUFFER_DURATION (buf) = duration;
-     GST_BUFFER_OFFSET (buf) = out_offset;
-@@ -5327,6 +5393,54 @@ gst_avi_demux_loop_data (GstAviDemux * avi)
-     /* update current position in the segment */
-     avi->segment.position = timestamp;
- 
-+	GST_DEBUG_OBJECT (avi, "stream->video_header_send_flag=%d", stream->video_header_send_flag);
-+
-+	if (stream->strh->type == GST_RIFF_FCC_vids) {
-+	  guint32 fourcc;
-+	  GstBuffer *frame_hdr = NULL;
-+	  fourcc = (stream->strf.vids->compression) ?
-+	      stream->strf.vids->compression : stream->strh->fcc_handler;
-+	  if (TRUE == stream->video_header_send_flag) {
-+		gchar *pad_name = NULL;
-+
-+		pad_name = GST_PAD_NAME (stream->pad);
-+		GST_INFO_OBJECT (avi, "pad_name = %s", pad_name);
-+
-+		if (!strncmp(pad_name, "video_", strlen("video_"))) {
-+		  GST_DEBUG_OBJECT (avi, "send video header,size=%" G_GSIZE_FORMAT, gst_buffer_get_size (stream->video_header));
-+		  if ((GST_MAKE_FOURCC ('W', 'V', 'C', '1') == fourcc) || (GST_MAKE_FOURCC ('W', 'M', 'V', '1') == fourcc)
-+			|| (GST_MAKE_FOURCC ('W', 'M', 'V', '2') == fourcc) || (GST_MAKE_FOURCC ('W', 'M', 'V', '3') == fourcc)
-+			|| (GST_MAKE_FOURCC ('W', 'M', 'V', 'A') == fourcc)){
-+			gst_pad_push (stream->pad, stream->video_header);
-+			stream->video_header_send_flag = FALSE;
-+			stream->video_header = NULL;
-+		  }
-+		  else {
-+	                    gst_buffer_unref(stream->video_header);
-+			stream->video_header_send_flag = FALSE;
-+			stream->video_header = NULL;
-+		  }
-+		}
-+	  }
-+
-+	  //add start code in WVC1 video, remove start code in WMV1/2/3 video
-+	  if (GST_MAKE_FOURCC ('W', 'V', 'C', '1') == fourcc) {
-+	        frame_hdr = gst_avi_demux_get_frame_header(avi);
-+	        buf = gst_buffer_append (frame_hdr, buf);
-+	  }
-+	  else if ((GST_MAKE_FOURCC ('W', 'M', 'V', '1') == fourcc) || (GST_MAKE_FOURCC ('W', 'M', 'V', '2') == fourcc)
-+	            || (GST_MAKE_FOURCC ('W', 'M', 'V', '3') == fourcc) || (GST_MAKE_FOURCC ('W', 'M', 'V', 'A') == fourcc)) {
-+		if (stream->extradata != NULL && stream->add_extra_data == TRUE) {
-+		  GstMapInfo info;
-+		  out = gst_buffer_copy_region (stream->extradata, GST_BUFFER_COPY_ALL,
-+	              gst_buffer_get_size (stream->extradata) - stream->ept_header_size, stream->ept_header_size);
-+		  buf = gst_buffer_append (out, buf);
-+		  stream->add_extra_data = FALSE;
-+		  GST_DEBUG_OBJECT (avi, "add_extra_data");
-+		}
-+	  }
-+	}
-+
-     GST_DEBUG_OBJECT (avi, "Pushing buffer of size %" G_GSIZE_FORMAT ", ts %"
-         GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT ", off %" G_GUINT64_FORMAT
-         ", off_end %" G_GUINT64_FORMAT,
-diff --git a/gst/avi/gstavidemux.h b/gst/avi/gstavidemux.h
-index 22e46a2..669ee27 100644
---- a/gst/avi/gstavidemux.h
-+++ b/gst/avi/gstavidemux.h
-@@ -120,6 +120,10 @@ typedef struct {
- 
-   gint           index_id;
-   gboolean is_raw;
-+  GstBuffer      *video_header;
-+  gboolean       video_header_send_flag;
-+  gboolean       add_extra_data;
-+  guint32		 ept_header_size;
-   gsize alignment;
- } GstAviStream;
- 
-diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
-index 705bdf7..ef1236b 100644
---- a/gst/isomp4/qtdemux.c
-+++ b/gst/isomp4/qtdemux.c
-@@ -13568,12 +13568,12 @@ gst_qtdemux_handle_esds (GstQTDemux * qtdemux, QtDemuxStream * stream,
-       caps = gst_caps_new_simple ("audio/x-dts",
-           "framed", G_TYPE_BOOLEAN, TRUE, NULL);
-       break;
--    case 0xE1:                 /* QCELP */
-+    //case 0xE1:                 /* QCELP */
-       /* QCELP, the codec_data is a riff tag (little endian) with
-        * more info (http://ftp.3gpp2.org/TSGC/Working/2003/2003-05-SanDiego/TSG-C-2003-05-San%20Diego/WG1/SWG12/C12-20030512-006%20=%20C12-20030217-015_Draft_Baseline%20Text%20of%20FFMS_R2.doc). */
--      caps = gst_caps_new_empty_simple ("audio/qcelp");
--      codec_name = "QCELP";
--      break;
-+      //caps = gst_caps_new_empty_simple ("audio/qcelp");
-+      //codec_name = "QCELP";
-+      //break;
-     default:
-       break;
-   }
-diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
-index 1b95451..878864d 100644
---- a/gst/matroska/matroska-demux.c
-+++ b/gst/matroska/matroska-demux.c
-@@ -646,13 +646,13 @@ gst_matroska_demux_parse_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml,
- 
-         if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK)
-           break;
--
-+	/*
-         if (num == 0) {
-           GST_ERROR_OBJECT (demux, "Invalid TrackUID 0");
-           ret = GST_FLOW_ERROR;
-           break;
-         }
--
-+	*/
-         GST_DEBUG_OBJECT (demux, "TrackUID: %" G_GUINT64_FORMAT, num);
-         context->uid = num;
-         break;
-@@ -4043,6 +4043,10 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
-           GST_BUFFER_PTS (sub) = lace_time;
-       }
- 
-+	  if (!GST_BUFFER_PTS_IS_VALID (sub)) {
-+        GST_BUFFER_PTS (sub) = lace_time;
-+      }
-+
-       buffer_timestamp = gst_matroska_track_get_buffer_timestamp (stream, sub);
- 
-       if (GST_CLOCK_TIME_IS_VALID (lace_time)) {
-@@ -5536,6 +5540,13 @@ gst_matroska_demux_video_caps (GstMatroskaTrackVideoContext *
-       if (size > sizeof (gst_riff_strf_vids)) { /* some extra_data */
-         gsize offset = sizeof (gst_riff_strf_vids);
- 
-+		char * pDest = (char *)&(vids->compression);
-+        int n_wmv = strncasecmp(pDest,"WMV",3);
-+        int n_wvc = strncasecmp(pDest,"WVC",3);
-+        if (!n_wmv || !n_wvc) {
-+          offset = 0;
-+        }
-+
-         buf =
-             gst_buffer_new_wrapped (g_memdup ((guint8 *) vids + offset,
-                 size - offset), size - offset);
-diff --git a/sys/v4l2/Makefile.am b/sys/v4l2/Makefile.am
-index 3126c11..2e810fa 100644
---- a/sys/v4l2/Makefile.am
-+++ b/sys/v4l2/Makefile.am
-@@ -14,13 +14,13 @@ libgstvideo4linux2_la_SOURCES = gstv4l2.c \
- 				gstv4l2tuner.c \
- 				gstv4l2transform.c \
- 				gstv4l2videodec.c \
-+				gstv4l2mtkvpudec.c \
-+				gstv4l2mtkjpegdec.c \
- 				gstv4l2videoenc.c \
- 				gstv4l2h263enc.c \
- 				gstv4l2h264enc.c \
- 				gstv4l2mpeg4enc.c \
- 				gstv4l2vidorient.c \
--				gstv4l2vp8enc.c \
--				gstv4l2vp9enc.c \
- 				v4l2_calls.c \
- 				v4l2-utils.c \
- 				tuner.c \
-@@ -60,13 +60,13 @@ noinst_HEADERS = \
- 	gstv4l2tuner.h \
- 	gstv4l2transform.h \
- 	gstv4l2videodec.h \
-+	gstv4l2mtkvpudec.h \
-+	gstv4l2mtkjpegdec.h \
- 	gstv4l2videoenc.h \
- 	gstv4l2h263enc.h \
- 	gstv4l2h264enc.h \
- 	gstv4l2mpeg4enc.h \
- 	gstv4l2vidorient.h \
--	gstv4l2vp8enc.h \
--	gstv4l2vp9enc.h \
- 	v4l2-utils.h \
- 	tuner.h \
- 	tunerchannel.h \
-diff --git a/sys/v4l2/ext/videodev2.h b/sys/v4l2/ext/videodev2.h
-index 59e1f3d..c0b023d 100644
---- a/sys/v4l2/ext/videodev2.h
-+++ b/sys/v4l2/ext/videodev2.h
-@@ -557,6 +557,9 @@ struct v4l2_pix_format {
- #define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
- #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */
- 
-+#define V4L2_PIX_FMT_MT21    v4l2_fourcc('M', 'M', '2', '1')
-+#define V4L2_PIX_FMT_YUV422M v4l2_fourcc('Y', 'M', '1', '6') /* 16  YUV422 planar */
-+
- /* three planes - Y Cb, Cr */
- #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
- #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
-@@ -615,14 +618,24 @@ struct v4l2_pix_format {
- #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
- #define V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */
- #define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
-+#define V4L2_PIX_FMT_H265     v4l2_fourcc('H', '2', '6', '5') /* H265 with start codes */
- #define V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
- #define V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
- #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
- #define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */
-+#define V4L2_PIX_FMT_S263     v4l2_fourcc('S', '2', '6', '3') /* S263          */
- #define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */
- #define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */
- #define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
-+#define V4L2_PIX_FMT_RV30    v4l2_fourcc('R', 'V', '3', '0') /* RV30 ES */
-+#define V4L2_PIX_FMT_RV40    v4l2_fourcc('R', 'V', '4', '0') /* RV40 ES */
- #define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
-+#define V4L2_PIX_FMT_DIVX     v4l2_fourcc('D', 'I', 'V', 'X') /* Divx           */
-+#define V4L2_PIX_FMT_DIVX3    v4l2_fourcc('D', 'I', 'V', '3') /* Divx3           */
-+#define V4L2_PIX_FMT_DIVX4    v4l2_fourcc('D', 'I', 'V', '4') /* Divx4           */
-+#define V4L2_PIX_FMT_DIVX5    v4l2_fourcc('D', 'I', 'V', '5') /* Divx5           */
-+#define V4L2_PIX_FMT_DIVX6    v4l2_fourcc('D', 'I', 'V', '6') /* Divx6           */
-+
- #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
- #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
- #define V4L2_PIX_FMT_VP8      v4l2_fourcc('V', 'P', '8', '0') /* VP8 */
-@@ -655,6 +668,12 @@ struct v4l2_pix_format {
- #define V4L2_PIX_FMT_JPGL	v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
- #define V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */
- #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
-+#define V4L2_PIX_FMT_WMV1	v4l2_fourcc('W', 'M', 'V', '1') /* WMV7 */
-+#define V4L2_PIX_FMT_WMV2	v4l2_fourcc('W', 'M', 'V', '2') /* WMV8 */
-+#define V4L2_PIX_FMT_WMV3	v4l2_fourcc('W', 'M', 'V', '3') /* WMV9 */
-+#define V4L2_PIX_FMT_WMVA	v4l2_fourcc('W', 'M', 'V', 'A') /* WMVA */
-+#define V4L2_PIX_FMT_WVC1	v4l2_fourcc('W', 'V', 'C', '1') /* VC1 */
-+
- #define V4L2_PIX_FMT_Y8I      v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */
- #define V4L2_PIX_FMT_Y12I     v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */
- #define V4L2_PIX_FMT_Z16      v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
-diff --git a/sys/v4l2/gstv4l2.c b/sys/v4l2/gstv4l2.c
-index 2674d9c..29e83a7 100644
---- a/sys/v4l2/gstv4l2.c
-+++ b/sys/v4l2/gstv4l2.c
-@@ -54,6 +54,9 @@
- #include "gstv4l2vp9enc.h"
- #include "gstv4l2deviceprovider.h"
- #include "gstv4l2transform.h"
-+#include "gstv4l2h264enc.h"
-+#include "gstv4l2mtkvpudec.h"
-+#include "gstv4l2mtkjpegdec.h"
- 
- /* used in gstv4l2object.c and v4l2_calls.c */
- GST_DEBUG_CATEGORY (v4l2_debug);
-@@ -181,10 +184,16 @@ gst_v4l2_probe_and_register (GstPlugin * plugin)
- 
-     basename = g_path_get_basename (it->device_path);
- 
--    if (gst_v4l2_is_video_dec (sink_caps, src_caps)) {
--      gst_v4l2_video_dec_register (plugin, basename, it->device_path,
-+    if (gst_v4l2_is_mtk_jpeg_dec (sink_caps, src_caps))
-+      gst_v4l2_mtk_jpeg_dec_register (plugin, basename, it->device_path,
-+          sink_caps, src_caps);
-+    else if (gst_v4l2_is_mtk_vpu_dec (sink_caps, src_caps))
-+      gst_v4l2_mtk_vpu_dec_register (plugin, basename, it->device_path,
-+          sink_caps, src_caps);
-+    else if (gst_v4l2_is_h264_enc (sink_caps, src_caps))
-+      gst_v4l2_h264_enc_register (plugin, basename, it->device_path,
-           sink_caps, src_caps);
--    } else if (gst_v4l2_is_video_enc (sink_caps, src_caps, NULL)) {
-+    else if (gst_v4l2_is_video_enc (sink_caps, src_caps, NULL)) {
-       if (gst_v4l2_is_h264_enc (sink_caps, src_caps))
-         gst_v4l2_h264_enc_register (plugin, basename, it->device_path,
-             sink_caps, src_caps);
-@@ -197,13 +206,13 @@ gst_v4l2_probe_and_register (GstPlugin * plugin)
-         gst_v4l2_h263_enc_register (plugin, basename, it->device_path,
-             sink_caps, src_caps);
- 
--      if (gst_v4l2_is_vp8_enc (sink_caps, src_caps))
--        gst_v4l2_vp8_enc_register (plugin, basename, it->device_path,
--            sink_caps, src_caps);
-+      //if (gst_v4l2_is_vp8_enc (sink_caps, src_caps))
-+        //gst_v4l2_vp8_enc_register (plugin, basename, it->device_path,
-+            //sink_caps, src_caps);
- 
--      if (gst_v4l2_is_vp9_enc (sink_caps, src_caps))
--        gst_v4l2_vp9_enc_register (plugin, basename, it->device_path,
--            sink_caps, src_caps);
-+      //if (gst_v4l2_is_vp9_enc (sink_caps, src_caps))
-+        //gst_v4l2_vp9_enc_register (plugin, basename, it->device_path,
-+            //sink_caps, src_caps);
-     } else if (gst_v4l2_is_transform (sink_caps, src_caps)) {
-       gst_v4l2_transform_register (plugin, basename, it->device_path,
-           sink_caps, src_caps);
-diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
-index 5a92dbb..124fef1 100644
---- a/sys/v4l2/gstv4l2bufferpool.c
-+++ b/sys/v4l2/gstv4l2bufferpool.c
-@@ -1715,6 +1715,7 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf)
-         case GST_V4L2_IO_DMABUF:
-         {
-           GstBuffer *tmp;
-+		  struct v4l2_pix_format *pix_fmt = &(obj->format.fmt.pix);
- 
-           if ((*buf)->pool == bpool) {
-             guint num_queued;
-@@ -1742,7 +1743,7 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf)
-             }
- 
-             /* start copying buffers when we are running low on buffers */
--            if (num_queued < pool->copy_threshold) {
-+            if (num_queued < pool->copy_threshold || pix_fmt->pixelformat == V4L2_PIX_FMT_MT21) {
-               GstBuffer *copy;
- 
-               if (GST_V4L2_ALLOCATOR_CAN_ALLOCATE (pool->vallocator, MMAP)) {
-@@ -1781,6 +1782,8 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf)
- 
-           ret = gst_v4l2_buffer_pool_copy_buffer (pool, *buf, tmp);
- 
-+		  GST_BUFFER_TIMESTAMP(*buf) = GST_BUFFER_TIMESTAMP(tmp);
-+
-           /* an queue the buffer again after the copy */
-           gst_v4l2_buffer_pool_release_buffer (bpool, tmp);
- 
-diff --git a/sys/v4l2/gstv4l2mtkjpegdec.c b/sys/v4l2/gstv4l2mtkjpegdec.c
-new file mode 100644
-index 0000000..a33d8f0
---- /dev/null
-+++ b/sys/v4l2/gstv4l2mtkjpegdec.c
-@@ -0,0 +1,183 @@
-+/*
-+ * Copyright (c) 2016 MediaTek Inc
-+ *     Author: Rick Chang <rick.chang@mediatek.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 <sys/stat.h>
-+#include <fcntl.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <string.h>
-+
-+#include "gstv4l2mtkjpegdec.h"
-+#include "v4l2_calls.h"
-+
-+#include <string.h>
-+#include <gst/gst-i18n-plugin.h>
-+
-+GST_DEBUG_CATEGORY_STATIC (gst_v4l2_mtk_jpeg_dec_debug);
-+#define GST_CAT_DEFAULT gst_v4l2_mtk_jpeg_dec_debug
-+
-+typedef struct
-+{
-+  gchar *device;
-+  GstCaps *sink_caps;
-+  GstCaps *src_caps;
-+} GstV4l2MtkJpegDecCData;
-+
-+enum
-+{
-+  PROP_0,
-+  V4L2_STD_OBJECT_PROPS,
-+};
-+
-+static GstStaticPadTemplate gst_mtk_jpeg_src_template =
-+GST_STATIC_PAD_TEMPLATE ("src",
-+    GST_PAD_SRC,
-+    GST_PAD_ALWAYS,
-+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ "
-+            "I420, Y42B, I422 } "))
-+    );
-+
-+#define gst_v4l2_mtk_jpeg_dec_parent_class parent_class
-+G_DEFINE_TYPE (GstV4l2MtkJpegDec, gst_v4l2_mtk_jpeg_dec, GST_TYPE_V4L2_VIDEO_DEC);
-+
-+static void
-+gst_v4l2_mtk_jpeg_dec_init (GstV4l2MtkJpegDec * self)
-+{
-+}
-+
-+static void
-+gst_v4l2_mtk_jpeg_dec_subinstance_init (GTypeInstance * instance, gpointer g_class)
-+{
-+  GstV4l2VideoDecClass *klass = GST_V4L2_VIDEO_DEC_CLASS (g_class);
-+  GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (instance);
-+  GstVideoDecoder *decoder = GST_VIDEO_DECODER (instance);
-+
-+  gst_video_decoder_set_packetized (decoder, TRUE);
-+
-+  self->v4l2output = gst_v4l2_object_new (GST_ELEMENT (self),
-+      GST_VIDEO_DECODER_SINK_PAD (decoder), V4L2_BUF_TYPE_VIDEO_OUTPUT, klass->default_device,
-+      gst_v4l2_get_output, gst_v4l2_set_output, NULL);
-+  self->v4l2output->no_initial_format = TRUE;
-+  self->v4l2output->keep_aspect = FALSE;
-+
-+  self->v4l2capture = gst_v4l2_object_new (GST_ELEMENT (self),
-+      GST_VIDEO_DECODER_SRC_PAD (decoder), V4L2_BUF_TYPE_VIDEO_CAPTURE, klass->default_device,
-+      gst_v4l2_get_input, gst_v4l2_set_input, NULL);
-+  self->v4l2capture->no_initial_format = TRUE;
-+  self->v4l2output->keep_aspect = FALSE;
-+}
-+
-+static void
-+gst_v4l2_mtk_jpeg_dec_class_init (GstV4l2MtkJpegDecClass * klass)
-+{
-+  GstElementClass *element_class;
-+  GObjectClass *gobject_class;
-+  GstV4l2VideoDecClass *v4l2_decoder_class;
-+  GstVideoEncoderClass *baseclass;
-+
-+  parent_class = g_type_class_peek_parent (klass);
-+
-+  element_class = (GstElementClass *) klass;
-+  gobject_class = (GObjectClass *) klass;
-+  v4l2_decoder_class = GST_V4L2_VIDEO_DEC_CLASS (klass);
-+  baseclass = GST_VIDEO_DECODER_CLASS (klass);
-+
-+  GST_DEBUG_CATEGORY_INIT (gst_v4l2_mtk_jpeg_dec_debug, "v4l2mtkjpegdec", 0,
-+      "V4L2 Mtk Jpeg HW Decoder");
-+
-+  gst_element_class_set_static_metadata (element_class,
-+      "V4L2 Mtk Jpeg HW Decoder",
-+      "Codec/Decoder/Image",
-+      "MTK jpeg HW decode via V4L2 API",
-+      "Rick Chang <rick.chang@mediatek.com>");
-+}
-+
-+static void
-+gst_v4l2_mtk_jpeg_dec_subclass_init (gpointer g_class, gpointer data)
-+{
-+  GstV4l2VideoDecClass *klass = GST_V4L2_VIDEO_DEC_CLASS (g_class);
-+  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-+  GstV4l2MtkJpegDecCData *cdata = data;
-+
-+  klass->default_device = cdata->device;
-+
-+  /* Note: gst_pad_template_new() take the floating ref from the caps */
-+  gst_element_class_add_pad_template (element_class,
-+      gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
-+          cdata->sink_caps));
-+  gst_element_class_add_pad_template (element_class,
-+      gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
-+          cdata->src_caps));
-+
-+  g_free (cdata);
-+}
-+
-+gboolean
-+gst_v4l2_is_mtk_jpeg_dec (GstCaps * sink_caps, GstCaps * src_caps)
-+{
-+  gboolean ret = FALSE;
-+  GstCaps *caps = gst_caps_new_empty_simple ("image/jpeg");
-+
-+  if (gst_caps_is_subset (sink_caps, caps)
-+      && gst_caps_is_subset (src_caps, gst_v4l2_object_get_raw_caps ()))
-+    ret = TRUE;
-+
-+  gst_caps_ref (caps);
-+  return ret;
-+}
-+
-+gboolean
-+gst_v4l2_mtk_jpeg_dec_register (GstPlugin * plugin, const gchar * basename,
-+    const gchar * device_path, GstCaps * sink_caps, GstCaps * src_caps)
-+{
-+  GTypeQuery type_query;
-+  GTypeInfo type_info = { 0, };
-+  GType type, subtype;
-+  gchar *type_name;
-+  GstV4l2MtkJpegDecCData *cdata;
-+
-+  cdata = g_new0 (GstV4l2MtkJpegDecCData, 1);
-+  cdata->device = g_strdup (device_path);
-+  cdata->sink_caps = gst_caps_ref (sink_caps);
-+  cdata->src_caps = gst_static_pad_template_get_caps(&gst_mtk_jpeg_src_template);
-+
-+  type = gst_v4l2_mtk_jpeg_dec_get_type ();
-+  g_type_query (type, &type_query);
-+  memset (&type_info, 0, sizeof (type_info));
-+  type_info.class_size = type_query.class_size;
-+  type_info.instance_size = type_query.instance_size;
-+  type_info.class_init = gst_v4l2_mtk_jpeg_dec_subclass_init;
-+  type_info.class_data = cdata;
-+  type_info.instance_init = gst_v4l2_mtk_jpeg_dec_subinstance_init;
-+
-+  type_name = g_strdup_printf ("v4l2mtkjpegdec");
-+  subtype = g_type_register_static (type, type_name, &type_info, 0);
-+
-+  gst_element_register (plugin, type_name, GST_RANK_PRIMARY + 1, subtype);
-+
-+  g_free (type_name);
-+
-+  return TRUE;
-+}
-\ No newline at end of file
-diff --git a/sys/v4l2/gstv4l2mtkjpegdec.h b/sys/v4l2/gstv4l2mtkjpegdec.h
-new file mode 100644
-index 0000000..9be6b04
---- /dev/null
-+++ b/sys/v4l2/gstv4l2mtkjpegdec.h
-@@ -0,0 +1,63 @@
-+/*
-+ * Copyright (c) 2016 MediaTek Inc
-+ *     Author: Rick Chang <rick.chang@mediatek.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_V4L2_MTK_JPEG_DEC_H__
-+#define __GST_V4L2_MTK_JPEG_DEC_H__
-+
-+#include <gst/gst.h>
-+#include "gstv4l2videodec.h"
-+
-+GST_DEBUG_CATEGORY_EXTERN (v4l2mtkjpegdec_debug);
-+
-+G_BEGIN_DECLS
-+#define GST_TYPE_V4L2_MTK_JPEG_DEC \
-+  (gst_v4l2_mtk_jpeg_dec_get_type())
-+#define GST_V4L2_MTK_JPEG_DEC(obj) \
-+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_V4L2_MTK_JPEG_DEC,GstV4l2MtkJpegDec))
-+#define GST_V4L2_MTK_JPEG_DEC_CLASS(klass) \
-+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_V4L2_MTK_JPEG_DEC,GstV4l2MtkJpegDecClass))
-+#define GST_IS_V4L2_MTK_JPEG_DEC(obj) \
-+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_V4L2_MTK_JPEG_DEC))
-+#define GST_IS_V4L2_MTK_JPEG_DEC_CLASS(obj) \
-+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_V4L2_MTK_JPEG_DEC))
-+typedef struct _GstV4l2MtkJpegDec GstV4l2MtkJpegDec;
-+typedef struct _GstV4l2MtkJpegDecClass GstV4l2MtkJpegDecClass;
-+
-+struct _GstV4l2MtkJpegDec
-+{
-+  GstV4l2VideoDec parent;
-+};
-+
-+struct _GstV4l2MtkJpegDecClass
-+{
-+  GstV4l2VideoDecClass parent_class;
-+};
-+
-+GType gst_v4l2_mtk_jpeg_dec_get_type (void);
-+
-+gboolean gst_v4l2_is_mtk_jpeg_dec (GstCaps * sink_caps, GstCaps * src_caps);
-+
-+gboolean gst_v4l2_mtk_jpeg_dec_register (GstPlugin * plugin,
-+    const gchar * basename,
-+    const gchar * device_path, GstCaps * sink_caps, GstCaps * src_caps);
-+
-+G_END_DECLS
-+#endif /* __GST_V4L2_MTK_JPEG_DEC_H__ */
-\ No newline at end of file
-diff --git a/sys/v4l2/gstv4l2mtkvpudec.c b/sys/v4l2/gstv4l2mtkvpudec.c
-new file mode 100644
-index 0000000..5c35961
---- /dev/null
-+++ b/sys/v4l2/gstv4l2mtkvpudec.c
-@@ -0,0 +1,181 @@
-+/*
-+ * Copyright (c) 2016 MediaTek Inc
-+ *     Author: Rick Chang <rick.chang@mediatek.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 <sys/stat.h>
-+#include <fcntl.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <string.h>
-+
-+#include "gstv4l2mtkvpudec.h"
-+#include "v4l2_calls.h"
-+
-+#include <string.h>
-+#include <gst/gst-i18n-plugin.h>
-+
-+GST_DEBUG_CATEGORY_STATIC (gst_v4l2_mtk_vpu_dec_debug);
-+#define GST_CAT_DEFAULT gst_v4l2_mtk_vpu_dec_debug
-+
-+typedef struct
-+{
-+  gchar *device;
-+  GstCaps *sink_caps;
-+  GstCaps *src_caps;
-+} GstV4l2MtkVpuDecCData;
-+
-+enum
-+{
-+  PROP_0,
-+  V4L2_STD_OBJECT_PROPS,
-+};
-+
-+static GstStaticPadTemplate gst_mtk_vpu_src_template =
-+GST_STATIC_PAD_TEMPLATE ("src",
-+    GST_PAD_SRC,
-+    GST_PAD_ALWAYS,
-+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ "
-+            "MT21 } "))
-+    );
-+
-+#define gst_v4l2_mtk_vpu_dec_parent_class parent_class
-+G_DEFINE_TYPE (GstV4l2MtkVpuDec, gst_v4l2_mtk_vpu_dec, GST_TYPE_V4L2_VIDEO_DEC);
-+
-+static void
-+gst_v4l2_mtk_vpu_dec_init (GstV4l2MtkVpuDec * self)
-+{
-+}
-+
-+static void
-+gst_v4l2_mtk_vpu_dec_subinstance_init (GTypeInstance * instance, gpointer g_class)
-+{
-+  GstV4l2VideoDecClass *klass = GST_V4L2_VIDEO_DEC_CLASS (g_class);
-+  GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (instance);
-+  GstVideoDecoder *decoder = GST_VIDEO_DECODER (instance);
-+
-+  gst_video_decoder_set_packetized (decoder, TRUE);
-+
-+  self->v4l2output = gst_v4l2_object_new (GST_ELEMENT (self),
-+      GST_VIDEO_DECODER_SINK_PAD (decoder), V4L2_BUF_TYPE_VIDEO_OUTPUT, klass->default_device,
-+      gst_v4l2_get_output, gst_v4l2_set_output, NULL);
-+  self->v4l2output->no_initial_format = TRUE;
-+  self->v4l2output->keep_aspect = FALSE;
-+
-+  self->v4l2capture = gst_v4l2_object_new (GST_ELEMENT (self),
-+      GST_VIDEO_DECODER_SRC_PAD (decoder), V4L2_BUF_TYPE_VIDEO_CAPTURE, klass->default_device,
-+      gst_v4l2_get_input, gst_v4l2_set_input, NULL);
-+  self->v4l2capture->no_initial_format = TRUE;
-+  self->v4l2output->keep_aspect = FALSE;
-+  self->v4l2capture->req_mode = GST_V4L2_IO_MMAP;
-+}
-+static void
-+gst_v4l2_mtk_vpu_dec_class_init (GstV4l2MtkVpuDecClass * klass)
-+{
-+  GstElementClass *element_class;
-+  GObjectClass *gobject_class;
-+  GstV4l2VideoDecClass *v4l2_decoder_class;
-+  GstVideoEncoderClass *baseclass;
-+
-+  parent_class = g_type_class_peek_parent (klass);
-+
-+  element_class = (GstElementClass *) klass;
-+  gobject_class = (GObjectClass *) klass;
-+  v4l2_decoder_class = GST_V4L2_VIDEO_DEC_CLASS (klass);
-+  baseclass = GST_VIDEO_DECODER_CLASS (klass);
-+
-+  GST_DEBUG_CATEGORY_INIT (gst_v4l2_mtk_vpu_dec_debug, "v4l2mtkvpudec", 0,
-+      "V4L2 Mtk Vpu HW Decoder");
-+
-+  gst_element_class_set_static_metadata (element_class,
-+      "V4L2 Mtk Vpu HW Decoder",
-+      "Codec/Decoder/Video",
-+      "MTK video HW decode via V4L2 API",
-+      "Rick Chang <rick.chang@mediatek.com>");
-+}
-+
-+static void
-+gst_v4l2_mtk_vpu_dec_subclass_init (gpointer g_class, gpointer data)
-+{
-+  GstV4l2VideoDecClass *klass = GST_V4L2_VIDEO_DEC_CLASS (g_class);
-+  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-+  GstV4l2MtkVpuDecCData *cdata = data;
-+
-+  klass->default_device = cdata->device;
-+
-+  /* Note: gst_pad_template_new() take the floating ref from the caps */
-+  gst_element_class_add_pad_template (element_class,
-+      gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
-+          cdata->sink_caps));
-+  gst_element_class_add_pad_template (element_class,
-+      gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
-+          cdata->src_caps));
-+
-+  g_free (cdata);
-+}
-+
-+gboolean
-+gst_v4l2_is_mtk_vpu_dec (GstCaps * sink_caps, GstCaps * src_caps)
-+{
-+  gboolean ret = FALSE;
-+
-+  if (gst_caps_is_subset (sink_caps, gst_v4l2_object_get_codec_caps ())
-+      && gst_caps_is_subset (src_caps, gst_v4l2_object_get_raw_caps ()))
-+    ret = TRUE;
-+
-+  return ret;
-+}
-+
-+gboolean
-+gst_v4l2_mtk_vpu_dec_register (GstPlugin * plugin, const gchar * basename,
-+    const gchar * device_path, GstCaps * sink_caps, GstCaps * src_caps)
-+{
-+  GTypeQuery type_query;
-+  GTypeInfo type_info = { 0, };
-+  GType type, subtype;
-+  gchar *type_name;
-+  GstV4l2MtkVpuDecCData *cdata;
-+
-+  cdata = g_new0 (GstV4l2MtkVpuDecCData, 1);
-+  cdata->device = g_strdup (device_path);
-+  cdata->sink_caps = gst_caps_ref (sink_caps);
-+  cdata->src_caps = gst_static_pad_template_get_caps(&gst_mtk_vpu_src_template);
-+
-+  type = gst_v4l2_mtk_vpu_dec_get_type ();
-+  g_type_query (type, &type_query);
-+  memset (&type_info, 0, sizeof (type_info));
-+  type_info.class_size = type_query.class_size;
-+  type_info.instance_size = type_query.instance_size;
-+  type_info.class_init = gst_v4l2_mtk_vpu_dec_subclass_init;
-+  type_info.class_data = cdata;
-+  type_info.instance_init = gst_v4l2_mtk_vpu_dec_subinstance_init;
-+
-+  type_name = g_strdup_printf ("v4l2mtkvpudec");
-+  subtype = g_type_register_static (type, type_name, &type_info, 0);
-+
-+  gst_element_register (plugin, type_name, GST_RANK_PRIMARY + 1, subtype);
-+
-+  g_free (type_name);
-+
-+  return TRUE;
-+}
-\ No newline at end of file
-diff --git a/sys/v4l2/gstv4l2mtkvpudec.h b/sys/v4l2/gstv4l2mtkvpudec.h
-new file mode 100644
-index 0000000..3a6c736
---- /dev/null
-+++ b/sys/v4l2/gstv4l2mtkvpudec.h
-@@ -0,0 +1,63 @@
-+/*
-+ * Copyright (c) 2016 MediaTek Inc
-+ *     Author: Rick Chang <rick.chang@mediatek.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_V4L2_MTK_VPU_DEC_H__
-+#define __GST_V4L2_MTK_VPU_DEC_H__
-+
-+#include <gst/gst.h>
-+#include "gstv4l2videodec.h"
-+
-+GST_DEBUG_CATEGORY_EXTERN (v4l2mtkvpudec_debug);
-+
-+G_BEGIN_DECLS
-+#define GST_TYPE_V4L2_MTK_VPU_DEC \
-+  (gst_v4l2_mtk_vpu_dec_get_type())
-+#define GST_V4L2_MTK_VPU_DEC(obj) \
-+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_V4L2_MTK_VPU_DEC,GstV4l2MtkVpuDec))
-+#define GST_V4L2_MTK_VPU_DEC_CLASS(klass) \
-+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_V4L2_MTK_VPU_DEC,GstV4l2MtkVpuDecClass))
-+#define GST_IS_V4L2_MTK_VPU_DEC(obj) \
-+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_V4L2_MTK_VPU_DEC))
-+#define GST_IS_V4L2_MTK_VPU_DEC_CLASS(obj) \
-+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_V4L2_MTK_VPU_DEC))
-+typedef struct _GstV4l2MtkVpuDec GstV4l2MtkVpuDec;
-+typedef struct _GstV4l2MtkVpuDecClass GstV4l2MtkVpuDecClass;
-+
-+struct _GstV4l2MtkVpuDec
-+{
-+  GstV4l2VideoDec parent;
-+};
-+
-+struct _GstV4l2MtkVpuDecClass
-+{
-+  GstV4l2VideoDecClass parent_class;
-+};
-+
-+GType gst_v4l2_mtk_vpu_dec_get_type (void);
-+
-+gboolean gst_v4l2_is_mtk_vpu_dec (GstCaps * sink_caps, GstCaps * src_caps);
-+
-+gboolean gst_v4l2_mtk_vpu_dec_register (GstPlugin * plugin,
-+    const gchar * basename,
-+    const gchar * device_path, GstCaps * sink_caps, GstCaps * src_caps);
-+
-+G_END_DECLS
-+#endif /* __GST_V4L2_MTK_VPU_DEC_H__ */
-\ No newline at end of file
-diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
-index 124c778..f567840 100644
---- a/sys/v4l2/gstv4l2object.c
-+++ b/sys/v4l2/gstv4l2object.c
-@@ -42,6 +42,8 @@
- #include "gst/gst-i18n-plugin.h"
- 
- #include <gst/video/video.h>
-+#include <sys/poll.h>
-+#include <poll.h>
- 
- GST_DEBUG_CATEGORY_EXTERN (v4l2_debug);
- #define GST_CAT_DEFAULT v4l2_debug
-@@ -138,6 +140,7 @@ static const GstV4L2FormatDesc gst_v4l2_formats[] = {
-   {V4L2_PIX_FMT_YUV410, TRUE, GST_V4L2_RAW},
-   {V4L2_PIX_FMT_YUV420, TRUE, GST_V4L2_RAW},
-   {V4L2_PIX_FMT_YUV420M, TRUE, GST_V4L2_RAW},
-+  {V4L2_PIX_FMT_YUV422M, TRUE, GST_V4L2_RAW},
-   {V4L2_PIX_FMT_HI240, TRUE, GST_V4L2_RAW},
-   {V4L2_PIX_FMT_HM12, TRUE, GST_V4L2_RAW},
-   {V4L2_PIX_FMT_M420, TRUE, GST_V4L2_RAW},
-@@ -186,6 +189,23 @@ static const GstV4L2FormatDesc gst_v4l2_formats[] = {
-   {V4L2_PIX_FMT_SN9C10X, TRUE, GST_V4L2_CODEC},
-   {V4L2_PIX_FMT_PWC1, TRUE, GST_V4L2_CODEC},
-   {V4L2_PIX_FMT_PWC2, TRUE, GST_V4L2_CODEC},
-+
-+  {V4L2_PIX_FMT_MT21, TRUE, GST_V4L2_RAW},
-+  {V4L2_PIX_FMT_DIVX, FALSE, GST_V4L2_CODEC},
-+  {V4L2_PIX_FMT_DIVX3, FALSE, GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
-+  {V4L2_PIX_FMT_DIVX4, FALSE, GST_V4L2_CODEC},
-+  {V4L2_PIX_FMT_DIVX5, FALSE, GST_V4L2_CODEC},
-+  {V4L2_PIX_FMT_DIVX6, FALSE, GST_V4L2_CODEC},
-+  {V4L2_PIX_FMT_S263, FALSE, GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
-+  {V4L2_PIX_FMT_H265, FALSE, GST_V4L2_CODEC},
-+  /*WMV not parseable */
-+  {V4L2_PIX_FMT_WMV1, FALSE, GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
-+  {V4L2_PIX_FMT_WMV2, FALSE, GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
-+  {V4L2_PIX_FMT_WMV3, FALSE, GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
-+
-+  /*realvideo not parseable */
-+  {V4L2_PIX_FMT_RV30, FALSE, GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
-+  {V4L2_PIX_FMT_RV40, FALSE, GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
- };
- 
- #define GST_V4L2_FORMAT_COUNT (G_N_ELEMENTS (gst_v4l2_formats))
-@@ -1055,6 +1075,7 @@ gst_v4l2_object_format_get_rank (const struct v4l2_fmtdesc *fmt)
-     case V4L2_PIX_FMT_NV61:    /* 16  Y/CrCb 4:2:2  */
-     case V4L2_PIX_FMT_NV61M:   /* Same as NV61      */
-     case V4L2_PIX_FMT_NV24:    /* 24  Y/CrCb 4:4:4  */
-+    case V4L2_PIX_FMT_MT21:
-       rank = YUV_ODD_BASE_RANK;
-       break;
- 
-@@ -1066,6 +1087,7 @@ gst_v4l2_object_format_get_rank (const struct v4l2_fmtdesc *fmt)
-       break;
-     case V4L2_PIX_FMT_YUV420:  /* I420, 12 bits per pixel */
-     case V4L2_PIX_FMT_YUV420M:
-+	case V4L2_PIX_FMT_YUV422M:
-       rank = YUV_BASE_RANK + 7;
-       break;
-     case V4L2_PIX_FMT_YUYV:    /* YUY2, 16 bits per pixel */
-@@ -1329,10 +1351,14 @@ gst_v4l2_object_v4l2fourcc_to_video_format (guint32 fourcc)
-     case V4L2_PIX_FMT_YUV420M:
-       format = GST_VIDEO_FORMAT_I420;
-       break;
-+    case V4L2_PIX_FMT_YUV422M:
-+      format = GST_VIDEO_FORMAT_I422;
-+      break;
-     case V4L2_PIX_FMT_YUYV:
-       format = GST_VIDEO_FORMAT_YUY2;
-       break;
-     case V4L2_PIX_FMT_YVU420:
-+	case V4L2_PIX_FMT_YVU420M:
-       format = GST_VIDEO_FORMAT_YV12;
-       break;
-     case V4L2_PIX_FMT_UYVY:
-@@ -1358,6 +1384,9 @@ gst_v4l2_object_v4l2fourcc_to_video_format (guint32 fourcc)
-     case V4L2_PIX_FMT_NV24:
-       format = GST_VIDEO_FORMAT_NV24;
-       break;
-+    case V4L2_PIX_FMT_MT21:
-+      format = GST_VIDEO_FORMAT_MT21;
-+      break;
-     default:
-       format = GST_VIDEO_FORMAT_UNKNOWN;
-       break;
-@@ -1407,18 +1436,45 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc)
-       break;
-     case V4L2_PIX_FMT_MPEG1:
-       structure = gst_structure_new ("video/mpeg",
--          "mpegversion", G_TYPE_INT, 2, NULL);
-+          "mpegversion", G_TYPE_INT, 1, NULL);
-       break;
-     case V4L2_PIX_FMT_MPEG2:
-       structure = gst_structure_new ("video/mpeg",
-           "mpegversion", G_TYPE_INT, 2, NULL);
-       break;
-     case V4L2_PIX_FMT_MPEG4:
--    case V4L2_PIX_FMT_XVID:
-       structure = gst_structure_new ("video/mpeg",
-           "mpegversion", G_TYPE_INT, 4, "systemstream",
-           G_TYPE_BOOLEAN, FALSE, NULL);
-       break;
-+    case V4L2_PIX_FMT_XVID:
-+      structure = gst_structure_new_empty ("video/x-xvid");
-+      break;
-+    case V4L2_PIX_FMT_DIVX3:
-+      structure = gst_structure_new("video/x-divx",
-+          "divxversion", G_TYPE_INT, 3, NULL);
-+      break;
-+    case V4L2_PIX_FMT_DIVX4:
-+      structure = gst_structure_new("video/x-divx",
-+          "divxversion", G_TYPE_INT, 4, NULL);
-+      break;
-+    case V4L2_PIX_FMT_DIVX5:
-+      structure = gst_structure_new("video/x-divx",
-+          "divxversion", G_TYPE_INT, 5, NULL);
-+      break;
-+    case V4L2_PIX_FMT_DIVX6:
-+      structure = gst_structure_new("video/x-divx",
-+          "divxversion", G_TYPE_INT, 6, NULL);
-+      break;
-+    case V4L2_PIX_FMT_S263:
-+      structure = gst_structure_new ("video/x-flash-video",
-+          "flvversion", G_TYPE_INT, 1, NULL);
-+      break;
-+    case V4L2_PIX_FMT_H265:    /* H.265 */
-+      structure = gst_structure_new ("video/x-h265",
-+          "stream-format", G_TYPE_STRING, "byte-stream", "alignment",
-+          G_TYPE_STRING, "au", NULL);
-+      break;
-     case V4L2_PIX_FMT_H263:
-       structure = gst_structure_new ("video/x-h263",
-           "variant", G_TYPE_STRING, "itu", NULL);
-@@ -1444,6 +1500,20 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc)
-     case V4L2_PIX_FMT_VP9:
-       structure = gst_structure_new_empty ("video/x-vp9");
-       break;
-+    case V4L2_PIX_FMT_WMV1:
-+    case V4L2_PIX_FMT_WMV2:
-+    case V4L2_PIX_FMT_WMV3:
-+    case V4L2_PIX_FMT_WMVA:
-+    case V4L2_PIX_FMT_WVC1:
-+      structure = gst_structure_new_empty ("video/x-wmv");
-+      break;
-+    case V4L2_PIX_FMT_RV30:
-+    case V4L2_PIX_FMT_RV40:
-+      structure = gst_structure_new_empty ("video/x-pn-realvideo");
-+      break;
-+    case V4L2_PIX_FMT_MT21:
-+      structure = gst_structure_new_empty ("video/x-raw");
-+      break;
-     case V4L2_PIX_FMT_GREY:    /*  8  Greyscale     */
-     case V4L2_PIX_FMT_Y16:
-     case V4L2_PIX_FMT_Y16_BE:
-@@ -1474,6 +1544,8 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc)
-     case V4L2_PIX_FMT_YUV410:
-     case V4L2_PIX_FMT_YUV420:  /* I420/IYUV */
-     case V4L2_PIX_FMT_YUV420M:
-+    case V4L2_PIX_FMT_YUV422M:
-+    case V4L2_PIX_FMT_YVU420M:
-     case V4L2_PIX_FMT_YUYV:
-     case V4L2_PIX_FMT_YVU420:
-     case V4L2_PIX_FMT_UYVY:
-@@ -1680,6 +1752,7 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
-   guint32 fourcc = 0, fourcc_nc = 0;
-   const gchar *mimetype;
-   struct v4l2_fmtdesc *fmt = NULL;
-+  gboolean prefered_non_contiguous = TRUE;;
- 
-   structure = gst_caps_get_structure (caps, 0);
- 
-@@ -1694,6 +1767,9 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
-         fourcc = V4L2_PIX_FMT_YUV420;
-         fourcc_nc = V4L2_PIX_FMT_YUV420M;
-         break;
-+      case GST_VIDEO_FORMAT_I422:
-+        fourcc = V4L2_PIX_FMT_YUV422M;
-+        break;
-       case GST_VIDEO_FORMAT_YUY2:
-         fourcc = V4L2_PIX_FMT_YUYV;
-         break;
-@@ -1702,6 +1778,7 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
-         break;
-       case GST_VIDEO_FORMAT_YV12:
-         fourcc = V4L2_PIX_FMT_YVU420;
-+		fourcc_nc = V4L2_PIX_FMT_YVU420M;
-         break;
-       case GST_VIDEO_FORMAT_Y41B:
-         fourcc = V4L2_PIX_FMT_YUV411P;
-@@ -1771,7 +1848,9 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
-         break;
-       case GST_VIDEO_FORMAT_GRAY16_BE:
-         fourcc = V4L2_PIX_FMT_Y16_BE;
--        break;
-+      case GST_VIDEO_FORMAT_MT21:
-+        fourcc = V4L2_PIX_FMT_MT21;
-+		break;
-       default:
-         break;
-     }
-@@ -1831,10 +1910,54 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
-       fourcc = V4L2_PIX_FMT_PWC1;
-     } else if (g_str_equal (mimetype, "video/x-pwc2")) {
-       fourcc = V4L2_PIX_FMT_PWC2;
-+    } else if (g_str_equal (mimetype, "video/x-xvid")) {
-+      fourcc = V4L2_PIX_FMT_XVID;
-+    } else if (g_str_equal (mimetype, "video/x-divx")) {
-+      gint version;
-+      if (gst_structure_get_int (structure, "divxversion", &version)) {
-+        switch (version) {
-+          case 3:
-+            fourcc = V4L2_PIX_FMT_DIVX3;
-+            break;
-+          case 4:
-+            fourcc = V4L2_PIX_FMT_DIVX4;
-+            break;
-+          case 5:
-+            fourcc = V4L2_PIX_FMT_DIVX5;
-+            break;
-+          case 6:
-+            fourcc = V4L2_PIX_FMT_DIVX6;
-+            break;
-+          default:
-+            break;
-+        }
-+      }
-+    } else if (g_str_equal (mimetype, "video/x-flash-video")) {
-+      fourcc = V4L2_PIX_FMT_S263;
-+    } else if (g_str_equal (mimetype, "video/x-h265")) {
-+      fourcc = V4L2_PIX_FMT_H265;
-+    } else if (g_str_equal (mimetype, "video/x-vp9")) {
-+      fourcc = V4L2_PIX_FMT_VP9;
-+    } else if (g_str_equal (mimetype, "video/x-wmv")) {
-+      fourcc = V4L2_PIX_FMT_WMV3;
-+    }else if (g_str_equal (mimetype, "video/x-pn-realvideo")) {
-+      gint version;
-+      if (gst_structure_get_int (structure, "rmversion", &version)) {
-+        switch (version) {
-+          case 3:
-+            fourcc = V4L2_PIX_FMT_RV30;
-+            break;
-+          case 4:
-+            fourcc = V4L2_PIX_FMT_RV40;
-+            break;
-+          default:
-+            break;
-+        }
-+      }
-     }
-   }
- 
--
-+  prefered_non_contiguous = v4l2object->prefered_non_contiguous;
-   /* Prefer the non-contiguous if supported */
-   v4l2object->prefered_non_contiguous = TRUE;
- 
-@@ -1845,7 +1968,8 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
- 
-   if (fmt == NULL) {
-     fmt = gst_v4l2_object_get_format_from_fourcc (v4l2object, fourcc);
--    v4l2object->prefered_non_contiguous = FALSE;
-+	if (!prefered_non_contiguous)
-+      v4l2object->prefered_non_contiguous = FALSE;
-   }
- 
-   if (fmt == NULL)
-@@ -2264,6 +2388,12 @@ gst_v4l2_object_add_colorspace (GstV4l2Object * v4l2object, GstStructure * s,
-   if (gst_v4l2_object_try_fmt (v4l2object, &fmt) == 0) {
-     if (gst_v4l2_object_get_colorspace (&fmt, &cinfo))
-       gst_v4l2_object_fill_colorimetry_list (&list, &cinfo);
-+    else {
-+      if (V4L2_TYPE_IS_OUTPUT (v4l2object->type)) {
-+        g_value_unset (&list);
-+        return;
-+      }
-+    }
-   }
- 
-   /* step 2: probe all colorspace other than default
-@@ -2660,6 +2790,9 @@ gst_v4l2_object_probe_caps_for_format (GstV4l2Object * v4l2object,
-       gst_value_set_int_range_step (&step_range, h, maxh, step_h);
-       gst_structure_take_value (tmp, "height", &step_range);
- 
-+      gst_structure_set (tmp, "width", GST_TYPE_INT_RANGE, (gint) w,
-+          (gint) maxw, "height", GST_TYPE_INT_RANGE, (gint) h, (gint) maxh,
-+          NULL);
-       /* no point using the results list here, since there's only one struct */
-       gst_v4l2_object_update_and_append (v4l2object, pixelformat, ret, tmp);
-     }
-@@ -3935,8 +4068,8 @@ gst_v4l2_object_acquire_format (GstV4l2Object * v4l2object, GstVideoInfo * info)
-     align.padding_top = r->top;
-     align.padding_right = width - r->width - r->left;
-     align.padding_bottom = height - r->height - r->top;
--    width = r->width;
--    height = r->height;
-+    //width = r->width;
-+    //height = r->height;
-   }
- 
-   gst_video_info_set_format (info, format, width, height);
-@@ -3995,6 +4128,516 @@ unsupported_format:
- }
- 
- gboolean
-+gst_v4l2_object_set_enc_format (GstV4l2Object * v4l2object, GstCaps * caps, gboolean active)
-+{
-+  gint fd = v4l2object->video_fd;
-+  struct v4l2_format format;
-+  struct v4l2_streamparm streamparm;
-+  enum v4l2_field field;
-+  guint32 pixelformat;
-+  struct v4l2_fmtdesc *fmtdesc;
-+  GstVideoInfo info;
-+  GstVideoAlignment align;
-+  gint width, height, fps_n, fps_d;
-+  gint n_v4l_planes;
-+  gint i = 0;
-+  gboolean is_mplane;
-+  enum v4l2_colorspace colorspace = 0;
-+
-+  GST_V4L2_CHECK_OPEN (v4l2object);
-+  if (active)
-+    GST_V4L2_CHECK_NOT_ACTIVE (v4l2object);
-+
-+  is_mplane = V4L2_TYPE_IS_MULTIPLANAR (v4l2object->type);
-+
-+  gst_video_info_init (&info);
-+  gst_video_alignment_reset (&align);
-+
-+  if (!gst_v4l2_object_get_caps_info (v4l2object, caps, &fmtdesc, &info))
-+    goto invalid_caps;
-+
-+  pixelformat = fmtdesc->pixelformat;
-+  width = GST_VIDEO_INFO_WIDTH (&info);
-+  height = GST_VIDEO_INFO_HEIGHT (&info);
-+  fps_n = GST_VIDEO_INFO_FPS_N (&info);
-+  fps_d = GST_VIDEO_INFO_FPS_D (&info);
-+
-+  /* if encoded format (GST_VIDEO_INFO_N_PLANES return 0)
-+   * or if contiguous is prefered */
-+  n_v4l_planes = GST_VIDEO_INFO_N_PLANES (&info);
-+  /* Rick Chang
-+     Our driver will check the number of planes. Can't change it.
-+     if (!n_v4l_planes || !v4l2object->prefered_non_contiguous)
-+  */
-+  if (!n_v4l_planes || (!v4l2object->prefered_non_contiguous && !V4L2_TYPE_IS_OUTPUT(v4l2object->type)))
-+    n_v4l_planes = 1;
-+
-+  if (GST_VIDEO_INFO_IS_INTERLACED (&info)) {
-+    GST_DEBUG_OBJECT (v4l2object->element, "interlaced video");
-+    /* ideally we would differentiate between types of interlaced video
-+     * but there is not sufficient information in the caps..
-+     */
-+    field = V4L2_FIELD_INTERLACED;
-+  } else {
-+    GST_DEBUG_OBJECT (v4l2object->element, "progressive video");
-+    field = V4L2_FIELD_NONE;
-+  }
-+
-+  if (V4L2_TYPE_IS_OUTPUT (v4l2object->type)) {
-+    /* We should set colorspace if we have it */
-+    if (gst_video_colorimetry_matches (&info.colorimetry, "bt601")) {
-+      colorspace = V4L2_COLORSPACE_SMPTE170M;
-+    } else if (gst_video_colorimetry_matches (&info.colorimetry, "bt709")) {
-+      colorspace = V4L2_COLORSPACE_REC709;
-+    } else if (gst_video_colorimetry_matches (&info.colorimetry, "smpte240m")) {
-+      colorspace = V4L2_COLORSPACE_SMPTE240M;
-+    } else {
-+      /* Try to guess colorspace according to pixelformat and size */
-+      if (GST_VIDEO_INFO_IS_YUV (&info)) {
-+        /* SD streams likely use SMPTE170M and HD streams REC709 */
-+        if (width <= 720 && height <= 576)
-+          colorspace = V4L2_COLORSPACE_SMPTE170M;
-+        else
-+          colorspace = V4L2_COLORSPACE_REC709;
-+      } else if (GST_VIDEO_INFO_IS_RGB (&info)) {
-+        colorspace = V4L2_COLORSPACE_SRGB;
-+      }
-+    }
-+  }
-+
-+  GST_DEBUG_OBJECT (v4l2object->element, "Desired format %dx%d, format "
-+      "%" GST_FOURCC_FORMAT " stride: %d", width, height,
-+      GST_FOURCC_ARGS (pixelformat), GST_VIDEO_INFO_PLANE_STRIDE (&info, 0));
-+
-+  memset (&format, 0x00, sizeof (struct v4l2_format));
-+  format.type = v4l2object->type;
-+
-+  if (is_mplane) {
-+    format.type = v4l2object->type;
-+    format.fmt.pix_mp.pixelformat = pixelformat;
-+    format.fmt.pix_mp.width = width;
-+    format.fmt.pix_mp.height = height;
-+    format.fmt.pix_mp.field = field;
-+    format.fmt.pix_mp.num_planes = n_v4l_planes;
-+
-+    /* try to ask our prefered stride but it's not a failure if not
-+     * accepted */
-+    for (i = 0; i < n_v4l_planes; i++) {
-+      gint stride = GST_VIDEO_INFO_PLANE_STRIDE (&info, i);
-+
-+      if (GST_VIDEO_FORMAT_INFO_IS_TILED (info.finfo))
-+        stride = GST_VIDEO_TILE_X_TILES (stride) <<
-+            GST_VIDEO_FORMAT_INFO_TILE_WS (info.finfo);
-+
-+      format.fmt.pix_mp.plane_fmt[i].bytesperline = stride;
-+    }
-+
-+    if (GST_VIDEO_INFO_FORMAT (&info) == GST_VIDEO_FORMAT_ENCODED)
-+      format.fmt.pix_mp.plane_fmt[0].sizeimage = ENCODED_BUFFER_SIZE;
-+  } else {
-+    gint stride = GST_VIDEO_INFO_PLANE_STRIDE (&info, 0);
-+
-+    format.type = v4l2object->type;
-+    format.fmt.pix.width = width;
-+    format.fmt.pix.height = height;
-+    format.fmt.pix.pixelformat = pixelformat;
-+    format.fmt.pix.field = field;
-+
-+    if (GST_VIDEO_FORMAT_INFO_IS_TILED (info.finfo))
-+      stride = GST_VIDEO_TILE_X_TILES (stride) <<
-+          GST_VIDEO_FORMAT_INFO_TILE_WS (info.finfo);
-+
-+    /* try to ask our prefered stride */
-+    format.fmt.pix.bytesperline = stride;
-+
-+    if (GST_VIDEO_INFO_FORMAT (&info) == GST_VIDEO_FORMAT_ENCODED)
-+      format.fmt.pix.sizeimage = ENCODED_BUFFER_SIZE;
-+  }
-+
-+  GST_DEBUG_OBJECT (v4l2object->element, "Desired format is %dx%d, format "
-+      "%" GST_FOURCC_FORMAT ", nb planes %d", format.fmt.pix.width,
-+      format.fmt.pix_mp.height,
-+      GST_FOURCC_ARGS (format.fmt.pix.pixelformat),
-+      is_mplane ? format.fmt.pix_mp.num_planes : 1);
-+
-+#ifndef GST_DISABLE_GST_DEBUG
-+  if (is_mplane) {
-+    for (i = 0; i < format.fmt.pix_mp.num_planes; i++)
-+      GST_DEBUG_OBJECT (v4l2object->element, "  stride %d",
-+          format.fmt.pix_mp.plane_fmt[i].bytesperline);
-+  } else {
-+    GST_DEBUG_OBJECT (v4l2object->element, "  stride %d",
-+        format.fmt.pix.bytesperline);
-+  }
-+#endif
-+
-+  if (V4L2_TYPE_IS_OUTPUT (v4l2object->type)) {
-+    if (is_mplane)
-+      format.fmt.pix_mp.colorspace = colorspace;
-+    else
-+      format.fmt.pix.colorspace = colorspace;
-+
-+    GST_DEBUG_OBJECT (v4l2object->element, "Desired colorspace is %d",
-+        colorspace);
-+  }
-+
-+  if (ioctl (fd, VIDIOC_S_FMT, &format) < 0)
-+    goto set_fmt_failed;
-+
-+  GST_DEBUG_OBJECT (v4l2object->element, "Got format of %dx%d, format "
-+      "%" GST_FOURCC_FORMAT ", nb planes %d, colorspace %d",
-+      format.fmt.pix.width, format.fmt.pix_mp.height,
-+      GST_FOURCC_ARGS (format.fmt.pix.pixelformat),
-+      is_mplane ? format.fmt.pix_mp.num_planes : 1,
-+      is_mplane ? format.fmt.pix_mp.colorspace : format.fmt.pix.colorspace);
-+
-+#ifndef GST_DISABLE_GST_DEBUG
-+  if (is_mplane) {
-+    for (i = 0; i < format.fmt.pix_mp.num_planes; i++)
-+      GST_DEBUG_OBJECT (v4l2object->element, "  stride %d, sizeimage %d",
-+          format.fmt.pix_mp.plane_fmt[i].bytesperline,
-+          format.fmt.pix_mp.plane_fmt[i].sizeimage);
-+  } else {
-+    GST_DEBUG_OBJECT (v4l2object->element, "  stride %d, sizeimage %d",
-+        format.fmt.pix.bytesperline, format.fmt.pix.sizeimage);
-+  }
-+#endif
-+
-+  if (format.fmt.pix.pixelformat != pixelformat)
-+    goto invalid_pixelformat;
-+
-+  /* Only negotiate size with raw data.
-+   * For some codecs the dimensions are *not* in the bitstream, IIRC VC1
-+   * in ASF mode for example, there is also not reason for a driver to
-+   * change the size. */
-+  if (info.finfo->format != GST_VIDEO_FORMAT_ENCODED) {
-+    /* We can crop larger images */
-+    if (format.fmt.pix.width < width || format.fmt.pix.height < height)
-+      goto invalid_dimensions;
-+
-+    /* Note, this will be adjusted if upstream has non-centered cropping. */
-+    align.padding_top = 0;
-+    align.padding_bottom = format.fmt.pix.height - height;
-+    align.padding_left = 0;
-+    align.padding_right = format.fmt.pix.width - width;
-+  }
-+
-+  if (is_mplane && format.fmt.pix_mp.num_planes != n_v4l_planes)
-+    goto invalid_planes;
-+
-+  if (GST_VIDEO_INFO_HAS_ALPHA (&info)) {
-+    struct v4l2_control ctl = { 0, };
-+    ctl.id = V4L2_CID_ALPHA_COMPONENT;
-+    ctl.value = 0xff;
-+
-+    if (ioctl (fd, VIDIOC_S_CTRL, &ctl) < 0)
-+      GST_WARNING_OBJECT (v4l2object->element,
-+          "Failed to set alpha component value");
-+  }
-+
-+  if (V4L2_TYPE_IS_OUTPUT (v4l2object->type)) {
-+    gint bitrate = 0;
-+    gint gop = 0;
-+    gint prepend_hdr = 0;
-+    struct v4l2_control gop_ctl = { 0, };
-+    struct v4l2_control bps_ctl = { 0, };
-+    struct v4l2_control prepend_hdr_ctl = { 0, };
-+    GstStructure *st;
-+
-+    st = gst_caps_get_structure (caps, 0);
-+    if (gst_structure_has_field (st, "bitrate")) {
-+      gst_structure_get_int(st, "bitrate", &bitrate);
-+    }
-+
-+    if (gst_structure_has_field (st, "gop")) {
-+      gst_structure_get_int(st, "gop", &gop);
-+    }
-+
-+    if (gst_structure_has_field (st, "prepend_hdr")) {
-+      gst_structure_get_int(st, "prepend_hdr", &prepend_hdr);
-+    }
-+
-+    bps_ctl.id = V4L2_CID_MPEG_VIDEO_BITRATE;
-+    bps_ctl.value = bitrate;
-+    if (ioctl (fd, VIDIOC_S_CTRL, &bps_ctl) < 0) {
-+      GST_WARNING_OBJECT (v4l2object->element,
-+        "Failed to set bps_ctl component value");
-+    }
-+
-+    gop_ctl.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
-+    gop_ctl.value = gop;
-+    if (ioctl (fd, VIDIOC_S_CTRL, &gop_ctl) < 0) {
-+      GST_WARNING_OBJECT (v4l2object->element,
-+        "Failed to set gop_ctl component value");
-+    }
-+
-+    prepend_hdr_ctl.id = V4L2_CID_MPEG_VIDEO_HEADER_MODE;
-+    prepend_hdr_ctl.value = prepend_hdr;
-+    if (ioctl (fd, VIDIOC_S_CTRL, &prepend_hdr_ctl) < 0) {
-+      GST_WARNING_OBJECT (v4l2object->element,
-+        "Failed to set prepend_hdr_ctl component value");
-+    }
-+
-+    GST_INFO_OBJECT (v4l2object->element, "bitrate = %d, gop=%d, prepend_hdr=%d",
-+      bitrate, gop, prepend_hdr);
-+  }
-+
-+  /* Is there a reason we require the caller to always specify a framerate? */
-+  GST_DEBUG_OBJECT (v4l2object->element, "Desired framerate: %u/%u", fps_n,
-+      fps_d);
-+
-+  memset (&streamparm, 0x00, sizeof (struct v4l2_streamparm));
-+  streamparm.type = v4l2object->type;
-+
-+  /* Rick Chang
-+     In encode flow, the frame rate is decided by client not driver.
-+  */
-+#if 0
-+  if (ioctl (fd, VIDIOC_G_PARM, &streamparm) < 0)
-+    goto get_parm_failed;
-+
-+  GST_VIDEO_INFO_FPS_N (&info) =
-+      streamparm.parm.capture.timeperframe.denominator;
-+  GST_VIDEO_INFO_FPS_D (&info) = streamparm.parm.capture.timeperframe.numerator;
-+
-+  if (v4l2object->type == V4L2_BUF_TYPE_VIDEO_CAPTURE
-+      || v4l2object->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
-+    GST_DEBUG_OBJECT (v4l2object->element, "Got framerate: %u/%u",
-+        streamparm.parm.capture.timeperframe.denominator,
-+        streamparm.parm.capture.timeperframe.numerator);
-+
-+    /* We used to skip frame rate setup if the camera was already setup
-+     * with the requested frame rate. This breaks some cameras though,
-+     * causing them to not output data (several models of Thinkpad cameras
-+     * have this problem at least).
-+     * So, don't skip. */
-+    GST_LOG_OBJECT (v4l2object->element, "Setting framerate to %u/%u", fps_n,
-+        fps_d);
-+    /* We want to change the frame rate, so check whether we can. Some cheap USB
-+     * cameras don't have the capability */
-+    if ((streamparm.parm.capture.capability & V4L2_CAP_TIMEPERFRAME) == 0) {
-+      GST_DEBUG_OBJECT (v4l2object->element,
-+          "Not setting framerate (not supported)");
-+      goto done;
-+    }
-+#endif
-+    if (V4L2_TYPE_IS_OUTPUT (v4l2object->type)) {
-+      /* Note: V4L2 wants the frame interval, we have the frame rate */
-+      streamparm.parm.capture.timeperframe.numerator = fps_d;
-+      streamparm.parm.capture.timeperframe.denominator = fps_n;
-+
-+      /* some cheap USB cam's won't accept any change */
-+      if (ioctl (fd, VIDIOC_S_PARM, &streamparm) < 0)
-+        goto set_parm_failed;
-+
-+      /* get new values */
-+      fps_d = streamparm.parm.capture.timeperframe.numerator;
-+      fps_n = streamparm.parm.capture.timeperframe.denominator;
-+
-+      GST_INFO_OBJECT (v4l2object->element, "Set framerate to %u/%u", fps_n,
-+          fps_d);
-+
-+      GST_VIDEO_INFO_FPS_N (&info) = fps_n;
-+      GST_VIDEO_INFO_FPS_D (&info) = fps_d;
-+    }
-+#if 0
-+  }
-+#endif
-+
-+done:
-+  if (!active)
-+    return TRUE;
-+
-+  /* add boolean return, so we can fail on drivers bugs */
-+  gst_v4l2_object_save_format (v4l2object, fmtdesc, &format, &info, &align);
-+
-+  /* now configure the pool */
-+  if (!gst_v4l2_object_setup_pool (v4l2object, caps))
-+    goto pool_failed;
-+
-+  return TRUE;
-+
-+  /* ERRORS */
-+invalid_caps:
-+  {
-+    GST_DEBUG_OBJECT (v4l2object->element, "can't parse caps %" GST_PTR_FORMAT,
-+        caps);
-+    return FALSE;
-+  }
-+set_fmt_failed:
-+  {
-+    if (errno == EBUSY) {
-+      GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, BUSY,
-+          (_("Device '%s' is busy"), v4l2object->videodev),
-+          ("Call to S_FMT failed for %" GST_FOURCC_FORMAT " @ %dx%d: %s",
-+              GST_FOURCC_ARGS (pixelformat), width, height,
-+              g_strerror (errno)));
-+    } else {
-+      GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,
-+          (_("Device '%s' cannot capture at %dx%d"),
-+              v4l2object->videodev, width, height),
-+          ("Call to S_FMT failed for %" GST_FOURCC_FORMAT " @ %dx%d: %s",
-+              GST_FOURCC_ARGS (pixelformat), width, height,
-+              g_strerror (errno)));
-+    }
-+    return FALSE;
-+  }
-+invalid_dimensions:
-+  {
-+    GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,
-+        (_("Device '%s' cannot capture at %dx%d"),
-+            v4l2object->videodev, width, height),
-+        ("Tried to capture at %dx%d, but device returned size %dx%d",
-+            width, height, format.fmt.pix.width, format.fmt.pix.height));
-+    return FALSE;
-+  }
-+invalid_pixelformat:
-+  {
-+    GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,
-+        (_("Device '%s' cannot capture in the specified format"),
-+            v4l2object->videodev),
-+        ("Tried to capture in %" GST_FOURCC_FORMAT
-+            ", but device returned format" " %" GST_FOURCC_FORMAT,
-+            GST_FOURCC_ARGS (pixelformat),
-+            GST_FOURCC_ARGS (format.fmt.pix.pixelformat)));
-+    return FALSE;
-+  }
-+invalid_planes:
-+  {
-+    GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,
-+        (_("Device '%s' does support non-contiguous planes"),
-+            v4l2object->videodev),
-+        ("Device wants %d planes", format.fmt.pix_mp.num_planes));
-+    return FALSE;
-+  }
-+get_parm_failed:
-+  {
-+    /* it's possible that this call is not supported */
-+    if (errno != EINVAL && errno != ENOTTY) {
-+      GST_ELEMENT_WARNING (v4l2object->element, RESOURCE, SETTINGS,
-+          (_("Could not get parameters on device '%s'"),
-+              v4l2object->videodev), GST_ERROR_SYSTEM);
-+    }
-+    goto done;
-+  }
-+set_parm_failed:
-+  {
-+    GST_ELEMENT_WARNING (v4l2object->element, RESOURCE, SETTINGS,
-+        (_("Video device did not accept new frame rate setting.")),
-+        GST_ERROR_SYSTEM);
-+    goto done;
-+  }
-+pool_failed:
-+  {
-+    /* setup_pool already send the error */
-+    return FALSE;
-+  }
-+}
-+
-+gboolean
-+gst_v4l2_object_get_crop (GstV4l2Object * obj, guint *crop_width, guint *crop_height)
-+{
-+  struct v4l2_crop crop = { 0 };
-+
-+  if ((crop_width == NULL) || (crop_height == NULL))
-+    return FALSE;
-+
-+  crop.type = obj->type;
-+
-+  if (ioctl (obj->video_fd, VIDIOC_G_CROP, &crop) < 0) {
-+    GST_WARNING_OBJECT (obj->element, "VIDIOC_G_CROP failed");
-+    return FALSE;
-+  }
-+  *crop_width = crop.c.width;
-+  *crop_height = crop.c.height;
-+
-+  GST_INFO_OBJECT (obj->element,
-+      "Got cropping left %u, top %u, size %ux%u", crop.c.left, crop.c.top,
-+      crop.c.width, crop.c.height);
-+
-+  return TRUE;
-+}
-+
-+gint
-+gst_v4l2_object_sub_event (GstV4l2Object * v4l2object)
-+{
-+  gint r;
-+  struct v4l2_event_subscription sub = { 0 };
-+
-+  sub.type = V4L2_EVENT_SOURCE_CHANGE;
-+  r = ioctl (v4l2object->video_fd, VIDIOC_SUBSCRIBE_EVENT, &sub);
-+
-+  sub.type = V4L2_EVENT_EOS;
-+  r = ioctl (v4l2object->video_fd, VIDIOC_SUBSCRIBE_EVENT, &sub);
-+
-+  return r;
-+}
-+
-+gint
-+gst_v4l2_object_check_res_change (GstV4l2Object * v4l2object)
-+{
-+  struct v4l2_event e = { 0 };
-+  __u32 change;
-+
-+  ioctl (v4l2object->video_fd, VIDIOC_DQEVENT, &e);
-+  GST_LOG ("e.type=%d",e.type);
-+
-+  switch (e.type) {
-+    case V4L2_EVENT_SOURCE_CHANGE:
-+    {
-+      change = e.u.src_change.changes;
-+      if (change & V4L2_EVENT_SRC_CH_RESOLUTION) {
-+        GST_LOG ("Got resolution change,change=%d", change);
-+        return GST_V4L2_RET_RES_CHANGE;
-+       }
-+    }
-+    case V4L2_EVENT_EOS:
-+    {
-+      GST_LOG ("Vdec not support the source, stop playing it");
-+      return GST_V4L2_RET_SRC_NOT_SUPPORT;
-+    }
-+    default :
-+      goto err;
-+  }
-+  return GST_V4L2_RET_OK;
-+err:
-+  GST_LOG ("Got unknonw event");
-+  return GST_V4L2_RET_FAIL;
-+}
-+
-+gint
-+gst_v4l2_object_poll (GstV4l2Object * v4l2object, gint timeout)
-+{
-+  struct pollfd pfd;
-+  gshort wait_event = V4L2_TYPE_IS_OUTPUT (v4l2object->type) ? POLLOUT : POLLIN;
-+  gint ret = 0;
-+  pfd.fd = v4l2object->video_fd;
-+  pfd.events = POLLERR;
-+  pfd.events |= wait_event;
-+  pfd.events |= POLLPRI;
-+
-+  GST_LOG ("before poll");
-+  ret = poll (&pfd, 1, timeout);
-+  GST_LOG ("after poll, pfd.revents=%d", pfd.revents);
-+
-+  if (ret == -1) {
-+    GST_LOG ("poll fail");
-+    return GST_V4L2_RET_FAIL;
-+  }
-+
-+  if (pfd.revents & POLLERR)
-+    return GST_V4L2_RET_FAIL;
-+
-+  if (pfd.revents & POLLPRI) {
-+    ret = gst_v4l2_object_check_res_change (v4l2object);
-+    return ret;
-+  }
-+
-+  if ((pfd.revents & wait_event) == wait_event)
-+    return GST_V4L2_RET_OK;
-+}
-+
-+gboolean
- gst_v4l2_object_set_crop (GstV4l2Object * obj)
- {
-   struct v4l2_selection sel = { 0 };
-diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h
-index 7871eaf..92f22a7 100644
---- a/sys/v4l2/gstv4l2object.h
-+++ b/sys/v4l2/gstv4l2object.h
-@@ -64,6 +64,17 @@ typedef enum {
-   GST_V4L2_IO_DMABUF_IMPORT = 5
- } GstV4l2IOMode;
- 
-+enum gst_V4L2_ret_type {
-+  GST_V4L2_RET_OK = 0,
-+  GST_V4L2_RET_FAIL = -1,
-+  GST_V4L2_RET_NO_FILE = -2,
-+  GST_V4L2_RET_NO_FREE_BUF = -3,
-+  GST_V4L2_RET_EOS = -4,
-+  GST_V4L2_RET_RES_CHANGE = -5,
-+  GST_V4L2_RET_SRC_NOT_SUPPORT = -6,
-+};
-+
-+
- typedef gboolean  (*GstV4l2GetInOutFunction)  (GstV4l2Object * v4l2object, gint * input);
- typedef gboolean  (*GstV4l2SetInOutFunction)  (GstV4l2Object * v4l2object, gint input);
- typedef gboolean  (*GstV4l2UpdateFpsFunction) (GstV4l2Object * v4l2object);
-@@ -324,6 +335,16 @@ gboolean     gst_v4l2_get_attribute   (GstV4l2Object * v4l2object, int attribute
- gboolean     gst_v4l2_set_attribute   (GstV4l2Object * v4l2object, int attribute, const int value);
- gboolean     gst_v4l2_set_controls    (GstV4l2Object * v4l2object, GstStructure * controls);
- 
-+gboolean      gst_v4l2_object_get_crop (GstV4l2Object * obj, guint *crop_width, guint *crop_height);
-+
-+gboolean      gst_v4l2_object_set_enc_format  (GstV4l2Object * v4l2object, GstCaps * caps, gboolean active);
-+
-+gint gst_v4l2_object_sub_event (GstV4l2Object * v4l2object);
-+
-+gint gst_v4l2_object_check_res_change (GstV4l2Object * v4l2object);
-+
-+gint gst_v4l2_object_poll (GstV4l2Object * v4l2object, gint timeout);
-+
- G_END_DECLS
- 
- #endif /* __GST_V4L2_OBJECT_H__ */
-diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c
-index 88c813f..8aa501a 100644
---- a/sys/v4l2/gstv4l2src.c
-+++ b/sys/v4l2/gstv4l2src.c
-@@ -200,6 +200,8 @@ gst_v4l2src_init (GstV4l2Src * v4l2src)
-       GST_OBJECT (GST_BASE_SRC_PAD (v4l2src)), V4L2_BUF_TYPE_VIDEO_CAPTURE,
-       DEFAULT_PROP_DEVICE, gst_v4l2_get_input, gst_v4l2_set_input, NULL);
- 
-+  v4l2src->v4l2object->prefered_non_contiguous = TRUE;
-+
-   /* Avoid the slow probes */
-   v4l2src->v4l2object->skip_try_fmt_probes = TRUE;
- 
-diff --git a/sys/v4l2/gstv4l2videodec.c b/sys/v4l2/gstv4l2videodec.c
-index 838ebff..71ff764 100644
---- a/sys/v4l2/gstv4l2videodec.c
-+++ b/sys/v4l2/gstv4l2videodec.c
-@@ -35,9 +35,20 @@
- #include <string.h>
- #include <gst/gst-i18n-plugin.h>
- 
-+#include <sys/poll.h>
-+#include <poll.h>
- GST_DEBUG_CATEGORY_STATIC (gst_v4l2_video_dec_debug);
- #define GST_CAT_DEFAULT gst_v4l2_video_dec_debug
- 
-+#define FPS_COUNT_NUM  120
-+
-+static gint fps_count = 0;
-+static gint64 time_start = 0;
-+static gint64 time_end = 0;
-+
-+static gint64 time_pre_frame = 0;
-+static guint32 video_count = 0;
-+static gboolean gst_v4l2_video_dec_flush (GstVideoDecoder * decoder);
- typedef struct
- {
-   gchar *device;
-@@ -111,7 +122,11 @@ static gboolean
- gst_v4l2_video_dec_open (GstVideoDecoder * decoder)
- {
-   GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (decoder);
-+
-   GstCaps *codec_caps;
-+  GstCaps *src_caps, *caps;
-+  GstElementClass *element_class = GST_ELEMENT_GET_CLASS (decoder);
-+  GstPadTemplate *pad_template;
- 
-   GST_DEBUG_OBJECT (self, "Opening");
- 
-@@ -129,8 +144,17 @@ gst_v4l2_video_dec_open (GstVideoDecoder * decoder)
-   if (gst_caps_is_empty (self->probed_sinkcaps))
-     goto no_encoded_format;
- 
--  self->probed_srccaps = gst_v4l2_object_probe_caps (self->v4l2capture,
--      gst_v4l2_object_get_raw_caps ());
-+//  self->probed_srccaps = gst_v4l2_object_probe_caps (self->v4l2capture,
-+//      gst_v4l2_object_get_raw_caps ());
-+  src_caps = gst_v4l2_object_get_caps (self->v4l2capture,
-+       gst_v4l2_object_get_raw_caps ());
-+  pad_template = gst_element_class_get_pad_template (element_class, "src");
-+  caps = gst_pad_template_get_caps (pad_template);
-+  self->probed_srccaps = gst_caps_intersect_full (src_caps, caps, GST_CAPS_INTERSECT_FIRST);
-+  gst_caps_unref (src_caps);
-+  gst_caps_unref (caps);
-+
-+  GST_INFO_OBJECT (self, "probed src caps: %" GST_PTR_FORMAT, self->probed_srccaps);
- 
-   if (gst_caps_is_empty (self->probed_srccaps))
-     goto no_raw_format;
-@@ -458,6 +482,86 @@ gst_v4l2_video_dec_get_oldest_frame (GstVideoDecoder * decoder)
- }
- 
- static void
-+gst_v4l2_update_caps (GstVideoDecoder * decoder, guint width, guint height, guint crop_width, guint crop_height)
-+{
-+  GstCaps *prevcaps = NULL;
-+  GstCaps *updatecaps = NULL;
-+  GstStructure *s = NULL;
-+
-+  prevcaps = gst_pad_get_current_caps (decoder->srcpad);
-+
-+  if (prevcaps) {
-+    gboolean ret = TRUE;
-+    gboolean res_changed = FALSE;
-+    gint disp_width = 0;
-+    gint disp_height = 0;
-+    gint pre_width = 0;
-+    gint pre_height = 0;
-+
-+    s = gst_caps_get_structure (prevcaps, 0);
-+    if (s && gst_structure_has_field (s, "display_width"))
-+      gst_structure_get_int (s, "display_width", &disp_width);
-+
-+    if (s && gst_structure_has_field (s, "display_height"))
-+      gst_structure_get_int (s, "display_height", &disp_height);
-+
-+    if (s && gst_structure_has_field (s, "width"))
-+      gst_structure_get_int (s, "width", &pre_width);
-+
-+    if (s && gst_structure_has_field (s, "height"))
-+      gst_structure_get_int (s, "height", &pre_height);
-+
-+    GST_INFO("display_width=%d,display_height=%d,crop.width=%d,crop.height=%d,prewidth=%d,preheight=%d,width=%d,height=%d",
-+      disp_width, disp_height, crop_width, crop_height, pre_width, pre_height, width, height);
-+
-+    updatecaps = gst_caps_copy_nth (prevcaps, 0);
-+
-+    if ((crop_width != disp_width) || (crop_height != disp_height)) {
-+      res_changed = TRUE;
-+      gst_caps_set_simple (updatecaps, "display_width", G_TYPE_INT, crop_width, NULL);
-+      gst_caps_set_simple (updatecaps, "display_height", G_TYPE_INT, crop_height, NULL);
-+    }
-+
-+    if ((pre_width != width) || (pre_height != height)) {
-+      res_changed = TRUE;
-+      gst_caps_set_simple (updatecaps, "width", G_TYPE_INT, width, NULL);
-+      gst_caps_set_simple (updatecaps, "height", G_TYPE_INT, height, NULL);
-+    }
-+
-+    if (res_changed == TRUE) {
-+      GstVideoCodecState *state = NULL;
-+      state = gst_video_decoder_get_output_state(decoder);
-+      state->caps = updatecaps;
-+      ret = gst_pad_set_caps (decoder->srcpad, updatecaps);
-+      if (ret == FALSE){
-+        GST_INFO("gst_pad_set_caps FAILED");
-+      }
-+    }
-+
-+    if (prevcaps)
-+      gst_caps_unref (prevcaps);
-+    if (updatecaps)
-+      gst_caps_unref (updatecaps);
-+  }
-+  return;
-+}
-+
-+static gboolean
-+gst_v4l2_video_codec_is_rm (GstVideoDecoder * decoder)
-+{
-+  gboolean rtn = FALSE;
-+  GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (decoder);
-+
-+  if (self->v4l2output->format.fmt.pix.pixelformat == V4L2_PIX_FMT_RV30
-+    ||self->v4l2output->format.fmt.pix.pixelformat == V4L2_PIX_FMT_RV40) {
-+    rtn = TRUE;
-+  }
-+
-+  return rtn;
-+}
-+
-+
-+static void
- gst_v4l2_video_dec_loop (GstVideoDecoder * decoder)
- {
-   GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (decoder);
-@@ -466,6 +570,9 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder)
-   GstVideoCodecFrame *frame;
-   GstBuffer *buffer = NULL;
-   GstFlowReturn ret;
-+  struct pollfd pfd;
-+  gshort wait_event = V4L2_TYPE_IS_OUTPUT(self->v4l2capture->type) ? POLLOUT : POLLIN;
-+  gboolean res_changed = FALSE;
- 
-   GST_LOG_OBJECT (decoder, "Allocate output buffer");
- 
-@@ -475,6 +582,47 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder)
-      * stream lock. we know that the acquire may need to poll until more frames
-      * comes in and holding this lock would prevent that.
-      */
-+    res_changed = gst_v4l2_object_poll (self->v4l2capture, 0);
-+    if (res_changed == GST_V4L2_RET_SRC_NOT_SUPPORT) {
-+      goto src_not_support;
-+    }
-+    if (res_changed == GST_V4L2_RET_RES_CHANGE) {
-+      GstVideoInfo info;
-+      guint crop_width = 0;
-+      guint crop_height = 0;
-+
-+      if (!gst_v4l2_video_codec_is_rm (decoder)) {
-+        if (self->v4l2capture->pool) {
-+          GST_INFO_OBJECT (decoder, "deactivating pool");
-+          gst_buffer_pool_set_active (self->v4l2capture->pool, FALSE);
-+        }
-+      }
-+
-+      if (!gst_v4l2_object_acquire_format (self->v4l2capture, &info)) {
-+        GST_INFO_OBJECT (decoder, "gst_v4l2_object_acquire_format failed");
-+        goto beach;
-+      }
-+
-+      if (TRUE == gst_v4l2_object_get_crop(self->v4l2capture, &crop_width, &crop_height)) {
-+        gst_v4l2_update_caps(decoder, info.width, info.height, crop_width, crop_height);
-+      }
-+      else {
-+        GST_WARNING_OBJECT (decoder, "gst_v4l2_object_get_crop failed");
-+        goto beach;
-+      }
-+
-+      if (!gst_video_decoder_negotiate (decoder)) {
-+        GST_ERROR_OBJECT (decoder, "negotiate error");
-+        goto beach;
-+      }
-+
-+      if (!gst_v4l2_video_codec_is_rm (decoder)) {
-+        if (self->v4l2capture->pool) {
-+          GST_INFO_OBJECT (decoder, "activating pool");
-+          gst_buffer_pool_set_active (GST_BUFFER_POOL (self->v4l2capture->pool), TRUE);
-+        }
-+      }
-+    }
-     pool = gst_video_decoder_get_buffer_pool (decoder);
- 
-     /* Pool may be NULL if we started going to READY state */
-@@ -501,9 +649,34 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder)
- 
-   if (frame) {
-     frame->output_buffer = buffer;
-+    if (GST_BUFFER_TIMESTAMP (buffer) != 0 && GST_BUFFER_TIMESTAMP (buffer) != (((GstClockTime)-1) - 999)) {
-+      frame->pts = GST_BUFFER_TIMESTAMP (buffer);
-+    }
-     buffer = NULL;
-     ret = gst_video_decoder_finish_frame (decoder, frame);
- 
-+    gint64 fps_time = 0;
-+    gfloat fps = 0;
-+
-+    if (fps_count == 0) {
-+      time_start = g_get_monotonic_time();
-+    }
-+
-+    fps_count++;
-+    if (fps_count == FPS_COUNT_NUM) {
-+      time_end = g_get_monotonic_time();
-+      fps_time = time_end - time_start;
-+      fps = FPS_COUNT_NUM * 1000000.0 / fps_time;
-+      GST_INFO_OBJECT (decoder, "fps = %f", fps);
-+      fps_count = 0;
-+    }
-+
-+    video_count++;
-+    gint64 time_cur = g_get_monotonic_time();
-+    GST_DEBUG_OBJECT (decoder, "[%d] frame time %lld us \n",
-+        video_count, (time_cur - time_pre_frame));
-+    time_pre_frame = time_cur;
-+
-     if (ret != GST_FLOW_OK)
-       goto beach;
-   } else {
-@@ -513,6 +686,18 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder)
- 
-   return;
- 
-+src_not_support:
-+  {
-+    GST_ERROR_OBJECT (decoder,
-+        "Vdec not support the source, post error message to pipeline to stop playing it");
-+    GError *gerror = g_error_new_literal (G_FILE_ERROR,
-+        G_FILE_ERROR_NOENT, "Vdec not support the source");
-+    gchar *sent_debug = g_strdup_printf ("%s(%d): %s ()",__FILE__, __LINE__, __FUNCTION__);
-+
-+    gst_element_post_message (&decoder->element,
-+        gst_message_new_error(GST_OBJECT_CAST (decoder), gerror, sent_debug));
-+  }
-+
- beach:
-   GST_DEBUG_OBJECT (decoder, "Leaving output thread: %s",
-       gst_flow_get_name (ret));
-@@ -557,6 +742,7 @@ gst_v4l2_video_remove_padding (GstCapsFeatures * features,
-   return TRUE;
- }
- 
-+gboolean polling_flag = FALSE;
- static GstFlowReturn
- gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
-     GstVideoCodecFrame * frame)
-@@ -567,6 +753,8 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
-   gboolean processed = FALSE;
-   GstBuffer *tmp;
-   GstTaskState task_state;
-+  GstElementClass *element_class = GST_ELEMENT_GET_CLASS (decoder);
-+  GstPadTemplate *pad_template;
- 
-   GST_DEBUG_OBJECT (self, "Handling frame %d", frame->system_frame_number);
- 
-@@ -584,6 +772,8 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
-   if (G_UNLIKELY (!GST_V4L2_IS_ACTIVE (self->v4l2capture))) {
-     GstBufferPool *pool = GST_BUFFER_POOL (self->v4l2output->pool);
-     GstVideoInfo info;
-+    GstVideoInfo input_info;
-+    GstVideoCodecState *input_state;
-     GstVideoCodecState *output_state;
-     GstBuffer *codec_data;
-     GstCaps *acquired_caps, *available_caps, *caps, *filter;
-@@ -619,6 +809,8 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
-     }
- 
-     GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
-+    if (gst_v4l2_object_sub_event (self->v4l2output) < 0)
-+      goto register_sub_event_failed;
-     ret =
-         gst_v4l2_buffer_pool_process (GST_V4L2_BUFFER_POOL (self->
-             v4l2output->pool), &codec_data);
-@@ -626,6 +818,9 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
- 
-     gst_buffer_unref (codec_data);
- 
-+    if (gst_v4l2_object_poll (self->v4l2output, 0) == GST_V4L2_RET_SRC_NOT_SUPPORT)
-+      goto src_not_support;
-+
-     /* For decoders G_FMT returns coded size, G_SELECTION returns visible size
-      * in the compose rectangle. gst_v4l2_object_acquire_format() checks both
-      * and returns the visible size as with/height and the coded size as
-@@ -635,9 +830,11 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
- 
-     /* Create caps from the acquired format, remove the format field */
-     acquired_caps = gst_video_info_to_caps (&info);
-+    if (self->v4l2capture->format.fmt.pix.pixelformat == V4L2_PIX_FMT_MT21) {
-     GST_DEBUG_OBJECT (self, "Acquired caps: %" GST_PTR_FORMAT, acquired_caps);
-     st = gst_caps_get_structure (acquired_caps, 0);
-     gst_structure_remove_field (st, "format");
-+	}
- 
-     /* Probe currently available pixel formats */
-     available_caps = gst_v4l2_object_probe_caps (self->v4l2capture, NULL);
-@@ -679,6 +876,23 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
- 
-     /* Copy the rest of the information, there might be more in the future */
-     output_state->info.interlace_mode = info.interlace_mode;
-+
-+    input_state = self->input_state;
-+    if (!input_state) {
-+        GST_ERROR_OBJECT (self, "input_state is null");
-+    } else {
-+        gst_video_info_from_caps(&input_info, input_state->caps);
-+        GST_DEBUG_OBJECT (self, "input_info.width=%d input_info.height=%d", input_info.width, input_info.height);
-+    }
-+
-+    if (output_state->caps == NULL) {
-+        output_state->caps = gst_video_info_to_caps (&output_state->info);
-+    }
-+
-+    gst_caps_set_simple (output_state->caps, "display_width", G_TYPE_INT, input_info.width, NULL);
-+    gst_caps_set_simple (output_state->caps, "display_height", G_TYPE_INT, input_info.height, NULL);
-+
-+
-     gst_video_codec_state_unref (output_state);
- 
-     if (!gst_video_decoder_negotiate (decoder)) {
-@@ -709,6 +923,8 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
-     /* Start the processing task, when it quits, the task will disable input
-      * processing to unlock input if draining, or prevent potential block */
-     self->output_flow = GST_FLOW_FLUSHING;
-+    if (gst_v4l2_object_sub_event (self->v4l2capture) < 0)
-+      goto register_sub_event_failed;
-     if (!gst_pad_start_task (decoder->srcpad,
-             (GstTaskFunction) gst_v4l2_video_dec_loop, self, NULL))
-       goto start_task_failed;
-@@ -779,6 +995,21 @@ process_failed:
-     ret = GST_FLOW_ERROR;
-     goto drop;
-   }
-+
-+src_not_support:
-+  {
-+    GST_ERROR_OBJECT (self, "Vdec not support the source");
-+    ret = GST_FLOW_ERROR;
-+    goto drop;
-+  }
-+
-+register_sub_event_failed:
-+  {
-+    GST_ERROR_OBJECT (self, "register sub event to driver failed");
-+    ret = GST_FLOW_ERROR;
-+    goto drop;
-+  }
-+
- drop:
-   {
-     gst_video_decoder_drop_frame (decoder, frame);
-@@ -939,6 +1170,8 @@ static void
- gst_v4l2_video_dec_init (GstV4l2VideoDec * self)
- {
-   /* V4L2 object are created in subinstance_init */
-+  gst_video_decoder_set_use_default_pad_acceptcaps (GST_VIDEO_DECODER_CAST
-+      (self), TRUE);
- }
- 
- static void
-diff --git a/sys/v4l2/gstv4l2videoenc.h b/sys/v4l2/gstv4l2videoenc.h
-index f03acd5..5d7be39 100644
---- a/sys/v4l2/gstv4l2videoenc.h
-+++ b/sys/v4l2/gstv4l2videoenc.h
-@@ -30,6 +30,8 @@
- #include <gstv4l2object.h>
- #include <gstv4l2bufferpool.h>
- 
-+GST_DEBUG_CATEGORY_EXTERN (v4l2videoenc_debug);
-+
- G_BEGIN_DECLS
- #define GST_TYPE_V4L2_VIDEO_ENC \
-   (gst_v4l2_video_enc_get_type())
-@@ -43,7 +45,6 @@ G_BEGIN_DECLS
-   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_V4L2_VIDEO_ENC))
- #define GST_V4L2_VIDEO_ENC_GET_CLASS(obj) \
-   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_V4L2_VIDEO_ENC, GstV4l2VideoEncClass))
--
- typedef struct _GstV4l2VideoEnc GstV4l2VideoEnc;
- typedef struct _GstV4l2VideoEncClass GstV4l2VideoEncClass;
- 
-@@ -63,8 +64,14 @@ struct _GstV4l2VideoEnc
-   GstVideoCodecState *input_state;
-   gboolean active;
-   gboolean processing;
-+  gboolean finish;
-   GstFlowReturn output_flow;
- 
-+  /*properity*/
-+  gint bitrate;
-+  gint gop;
-+  gint prepend_hdr;
-+
- };
- 
- struct _GstV4l2VideoEncClass
-@@ -72,6 +79,9 @@ struct _GstV4l2VideoEncClass
-   GstVideoEncoderClass parent_class;
- 
-   gchar *default_device;
-+
-+    GstFlowReturn (*handle_frame) (GstVideoEncoder * encoder,
-+      GstVideoCodecFrame * frame, GstCaps * outcaps);
-   const char *codec_name;
- 
-   guint32 profile_cid;
-@@ -85,13 +95,20 @@ struct _GstV4l2VideoEncClass
- 
- GType gst_v4l2_video_enc_get_type (void);
- 
--
- gboolean gst_v4l2_is_video_enc (GstCaps * sink_caps, GstCaps * src_caps,
-     GstCaps * codec_caps);
- 
-+static void
-+gst_v4l2_video_enc_set_property (GObject * object,
-+    guint prop_id, const GValue * value, GParamSpec * pspec);
-+
-+static void
-+gst_v4l2_video_enc_get_property (GObject * object,
-+    guint prop_id, GValue * value, GParamSpec * pspec);
-+
- void gst_v4l2_video_enc_register (GstPlugin * plugin, GType type,
-     const char *codec, const gchar * basename, const gchar * device_path,
-     GstCaps * sink_caps, GstCaps *codec_caps, GstCaps * src_caps);
- 
- G_END_DECLS
- #endif /* __GST_V4L2_VIDEO_ENC_H__ */
-diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c
-index d3dbd42..60fb6ce 100644
---- a/sys/v4l2/v4l2_calls.c
-+++ b/sys/v4l2/v4l2_calls.c
-@@ -38,6 +38,8 @@
- #include <stropts.h>
- #include <sys/ioccom.h>
- #endif
-+#include "v4l2-utils.h"
-+
- #include "gstv4l2object.h"
- #include "gstv4l2tuner.h"
- #include "gstv4l2colorbalance.h"
-@@ -520,6 +522,12 @@ gst_v4l2_open (GstV4l2Object * v4l2object)
-   struct stat st;
-   int libv4l2_fd = -1;
- 
-+  GstV4l2Iterator *it;
-+  gboolean ret = TRUE;
-+  it = gst_v4l2_iterator_new ();
-+
-+retry:
-+
-   GST_DEBUG_OBJECT (v4l2object->dbg_obj, "Trying to open device %s",
-       v4l2object->videodev);
- 
-@@ -567,7 +575,23 @@ gst_v4l2_open (GstV4l2Object * v4l2object)
-   if (GST_IS_V4L2SRC (v4l2object->element) &&
-       !(v4l2object->device_caps & (V4L2_CAP_VIDEO_CAPTURE |
-               V4L2_CAP_VIDEO_CAPTURE_MPLANE)))
--    goto not_capture;
-+   {
-+        ret = gst_v4l2_iterator_next (it);
-+      if (ret) {
-+        v4l2object->videodev = it->device_path;
-+        if (GST_V4L2_IS_OPEN (v4l2object)) {
-+          close (v4l2object->video_fd);
-+          v4l2object->video_fd = -1;
-+        }
-+        goto retry;
-+      }
-+      else {
-+        GST_DEBUG_OBJECT (v4l2object->element, "Cannot find capure device");
-+        gst_v4l2_iterator_free (it);
-+        goto not_capture;
-+      }
-+  }
-+  gst_v4l2_iterator_free (it);
- 
-   if (GST_IS_V4L2SINK (v4l2object->element) &&
-       !(v4l2object->device_caps & (V4L2_CAP_VIDEO_OUTPUT |
-@@ -588,6 +612,9 @@ gst_v4l2_open (GstV4l2Object * v4l2object)
-       "Opened device '%s' (%s) successfully",
-       v4l2object->vcap.card, v4l2object->videodev);
- 
-+  if (v4l2object->vcap.capabilities & V4L2_CAP_VIDEO_CAPTURE_MPLANE)
-+    v4l2object->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
-+
-   if (v4l2object->extra_controls)
-     gst_v4l2_set_controls (v4l2object, v4l2object->extra_controls);
- 
-diff --git a/sys/v4l2/v4l2_calls.h b/sys/v4l2/v4l2_calls.h
-new file mode 100644
-index 0000000..1560b9a
---- /dev/null
-+++ b/sys/v4l2/v4l2_calls.h
-@@ -0,0 +1,138 @@
-+/* GStreamer
-+ *
-+ * Copyright (C) 2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
-+ *               2006 Edgard Lima <edgard.lima@gmail.com>
-+ *
-+ * v4l2_calls.h - generic V4L2 calls handling
-+ *
-+ * 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 __V4L2_CALLS_H__
-+#define __V4L2_CALLS_H__
-+
-+#include "gstv4l2object.h"
-+
-+#ifdef HAVE_LIBV4L2
-+#  include <libv4l2.h>
-+#else
-+#  include "ext/videodev2.h"
-+#  include <sys/ioctl.h>
-+#  include <sys/mman.h>
-+#  include <unistd.h>
-+#  define v4l2_fd_open(fd, flags) (fd)
-+#  define v4l2_close    close
-+#  define v4l2_dup      dup
-+#  define v4l2_ioctl    ioctl
-+#  define v4l2_read     read
-+#  define v4l2_mmap     mmap
-+#  define v4l2_munmap   munmap
-+#endif
-+
-+#define GST_V4L2_IS_OVERLAY(v4l2object) \
-+  (v4l2object->vcap.capabilities & V4L2_CAP_VIDEO_OVERLAY)
-+
-+/* checks whether the current v4lv4l2object has already been open()'ed or not */
-+#define GST_V4L2_CHECK_OPEN(v4l2object)				\
-+  if (!GST_V4L2_IS_OPEN(v4l2object))				\
-+  {								\
-+    GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,	\
-+      (_("Device is not open.")), (NULL));                      \
-+    return FALSE;						\
-+  }
-+
-+/* checks whether the current v4lv4l2object is close()'ed or whether it is still open */
-+#define GST_V4L2_CHECK_NOT_OPEN(v4l2object)			\
-+  if (GST_V4L2_IS_OPEN(v4l2object))				\
-+  {								\
-+    GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,	\
-+      (_("Device is open.")), (NULL));                          \
-+    return FALSE;						\
-+  }
-+
-+/* checks whether the current v4lv4l2object does video overlay */
-+#define GST_V4L2_CHECK_OVERLAY(v4l2object)			\
-+  if (!GST_V4L2_IS_OVERLAY(v4l2object))				\
-+  {								\
-+    GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS, \
-+      (NULL), ("Device cannot handle overlay"));                \
-+    return FALSE;						\
-+  }
-+
-+/* checks whether we're in capture mode or not */
-+#define GST_V4L2_CHECK_ACTIVE(v4l2object)			\
-+  if (!GST_V4L2_IS_ACTIVE(v4l2object))				\
-+  {								\
-+    GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS, \
-+      (NULL), ("Device is not in streaming mode"));             \
-+    return FALSE;						\
-+  }
-+
-+/* checks whether we're out of capture mode or not */
-+#define GST_V4L2_CHECK_NOT_ACTIVE(v4l2object)			\
-+  if (GST_V4L2_IS_ACTIVE(v4l2object))				\
-+  {								\
-+    GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS, \
-+      (NULL), ("Device is in streaming mode"));                 \
-+    return FALSE;						\
-+  }
-+
-+
-+/* open/close the device */
-+gboolean	gst_v4l2_open			(GstV4l2Object *v4l2object);
-+gboolean	gst_v4l2_dup			(GstV4l2Object *v4l2object, GstV4l2Object *other);
-+gboolean	gst_v4l2_close			(GstV4l2Object *v4l2object);
-+
-+/* norm/input/output */
-+gboolean	gst_v4l2_get_norm		(GstV4l2Object *v4l2object,
-+						 v4l2_std_id    *norm);
-+gboolean	gst_v4l2_set_norm		(GstV4l2Object *v4l2object,
-+						 v4l2_std_id     norm);
-+gboolean        gst_v4l2_get_input              (GstV4l2Object * v4l2object,
-+                                                 gint * input);
-+gboolean        gst_v4l2_set_input              (GstV4l2Object * v4l2object,
-+                                                 gint input);
-+gboolean	gst_v4l2_get_output		(GstV4l2Object *v4l2object,
-+						 gint           *output);
-+gboolean	gst_v4l2_set_output		(GstV4l2Object *v4l2object,
-+						 gint            output);
-+
-+/* frequency control */
-+gboolean	gst_v4l2_get_frequency		(GstV4l2Object *v4l2object,
-+						 gint            tunernum,
-+            gulong         *frequency);
-+gboolean	gst_v4l2_set_frequency		(GstV4l2Object *v4l2object,
-+						 gint            tunernum,
-+            gulong          frequency);
-+gboolean	gst_v4l2_signal_strength	(GstV4l2Object *v4l2object,
-+						 gint            tunernum,
-+						 gulong         *signal);
-+
-+/* attribute control */
-+gboolean	gst_v4l2_get_attribute		(GstV4l2Object *v4l2object,
-+						 int             attribute,
-+						 int            *value);
-+gboolean	gst_v4l2_set_attribute		(GstV4l2Object *v4l2object,
-+						 int             attribute,
-+						 const int       value);
-+
-+gboolean	gst_v4l2_set_controls		(GstV4l2Object * v4l2object,
-+						 GstStructure * controls);
-+
-+gboolean        gst_v4l2_get_capabilities       (GstV4l2Object * v4l2object);
-+
-+
-+#endif /* __V4L2_CALLS_H__ */
--- 
-2.6.4
diff --git a/debian/patches/0002-v4l2convert.patch b/debian/patches/0002-v4l2convert.patch
deleted file mode 100644
index 83e351d..0000000
--- a/debian/patches/0002-v4l2convert.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From b1185b61dac1524ae913e8d71a3ee0e43f70c74d Mon Sep 17 00:00:00 2001
-From: Michael Tretter <m.tretter@pengutronix.de>
-Date: Sun, 1 Jul 2018 15:27:32 -0400
-Subject: [PATCH] v4l2transform: Implement stable element name
-
-The first converter to be found will now gain the name v4l2convert.
-Other converters will be named after the m2m dev node end point they are
-attached to.
-
-https://bugzilla.gnome.org/show_bug.cgi?id=784958
----
- sys/v4l2/gstv4l2transform.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/sys/v4l2/gstv4l2transform.c b/sys/v4l2/gstv4l2transform.c
-index 2f01375b..a9294e23 100644
---- a/sys/v4l2/gstv4l2transform.c
-+++ b/sys/v4l2/gstv4l2transform.c
-@@ -1192,7 +1192,10 @@ gst_v4l2_transform_register (GstPlugin * plugin, const gchar * basename,
-   type_info.class_data = cdata;
-   type_info.instance_init = gst_v4l2_transform_subinstance_init;
- 
--  type_name = g_strdup_printf ("v4l2%sconvert", basename);
-+  if (g_type_from_name ("v4l2convert") != 0)
-+    type_name = g_strdup_printf ("v4l2%sconvert", basename);
-+  else
-+    type_name = g_strdup ("v4l2convert");
-   subtype = g_type_register_static (type, type_name, &type_info, 0);
- 
-   if (!gst_element_register (plugin, type_name, GST_RANK_NONE, subtype))
diff --git a/debian/patches/0003-fix-wrong-format-set-for-GRAY16_BE.patch b/debian/patches/0003-fix-wrong-format-set-for-GRAY16_BE.patch
deleted file mode 100644
index 0a06b2b..0000000
--- a/debian/patches/0003-fix-wrong-format-set-for-GRAY16_BE.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From e98a97499d9796bbfe1ddb840e6c8b209770f77e Mon Sep 17 00:00:00 2001
-From: Fabien Parent <fparent@baylibre.com>
-Date: Wed, 26 Aug 2020 19:09:50 +0200
-Subject: [PATCH 3/5] fix wrong format set for GRAY16_BE
-
-Because of a missing break, a wrong format will be set when trying
-to use GRAY16_BE
-
-Signed-off-by: Fabien Parent <fparent@baylibre.com>
----
- sys/v4l2/gstv4l2object.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
-index 94ed123142c7..4b4b29a830fd 100644
---- a/sys/v4l2/gstv4l2object.c
-+++ b/sys/v4l2/gstv4l2object.c
-@@ -1848,6 +1848,7 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
-         break;
-       case GST_VIDEO_FORMAT_GRAY16_BE:
-         fourcc = V4L2_PIX_FMT_Y16_BE;
-+        break;
-       case GST_VIDEO_FORMAT_MT21:
-         fourcc = V4L2_PIX_FMT_MT21;
- 		break;
--- 
-2.28.0
-
diff --git a/debian/patches/0004-Add-support-for-non-continuous-MT21-format.patch b/debian/patches/0004-Add-support-for-non-continuous-MT21-format.patch
deleted file mode 100644
index 95b89c5..0000000
--- a/debian/patches/0004-Add-support-for-non-continuous-MT21-format.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 251ce6860c63eecb636778e5d109e11650f0d220 Mon Sep 17 00:00:00 2001
-From: Fabien Parent <fparent@baylibre.com>
-Date: Wed, 26 Aug 2020 19:10:57 +0200
-Subject: [PATCH 4/5] Add support for non-continuous MT21 format
-
-In order to use non-continuous MT21 planes, we need to set correctly
-its fourcc_nc.
-
-Signed-off-by: Fabien Parent <fparent@baylibre.com>
----
- sys/v4l2/gstv4l2object.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
-index 4b4b29a830fd..886372789536 100644
---- a/sys/v4l2/gstv4l2object.c
-+++ b/sys/v4l2/gstv4l2object.c
-@@ -1851,6 +1851,7 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
-         break;
-       case GST_VIDEO_FORMAT_MT21:
-         fourcc = V4L2_PIX_FMT_MT21;
-+        fourcc_nc = V4L2_PIX_FMT_MT21;
- 		break;
-       default:
-         break;
--- 
-2.28.0
-
diff --git a/debian/patches/0005-use-display_-width-height-for-cropping-instead-of-wi.patch b/debian/patches/0005-use-display_-width-height-for-cropping-instead-of-wi.patch
deleted file mode 100644
index 816a871..0000000
--- a/debian/patches/0005-use-display_-width-height-for-cropping-instead-of-wi.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From 693b42bc08df5a3e79d21c060910feaa7a830f96 Mon Sep 17 00:00:00 2001
-From: Fabien Parent <fparent@baylibre.com>
-Date: Wed, 26 Aug 2020 19:16:53 +0200
-Subject: [PATCH 5/5] use display_{width,height} for cropping instead of
- width,height
-
-Use display_width and display_height to do the cropping if there are
-part of the caps. Also always set the cropping.
-
-Signed-off-by: Fabien Parent <fparent@baylibre.com>
----
- sys/v4l2/gstv4l2object.c    | 14 +++++++++-----
- sys/v4l2/gstv4l2object.h    |  2 +-
- sys/v4l2/gstv4l2transform.c |  4 ++--
- 3 files changed, 12 insertions(+), 8 deletions(-)
-
-diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
-index 886372789536..0fefbfb38686 100644
---- a/sys/v4l2/gstv4l2object.c
-+++ b/sys/v4l2/gstv4l2object.c
-@@ -4640,10 +4640,11 @@ gst_v4l2_object_poll (GstV4l2Object * v4l2object, gint timeout)
- }
- 
- gboolean
--gst_v4l2_object_set_crop (GstV4l2Object * obj)
-+gst_v4l2_object_set_crop (GstV4l2Object * obj, GstCaps * caps)
- {
-   struct v4l2_selection sel = { 0 };
-   struct v4l2_crop crop = { 0 };
-+  GstStructure *st;
- 
-   sel.type = obj->type;
-   sel.target = V4L2_SEL_TGT_CROP;
-@@ -4656,10 +4657,13 @@ gst_v4l2_object_set_crop (GstV4l2Object * obj)
-   crop.type = obj->type;
-   crop.c = sel.r;
- 
--  if (obj->align.padding_left + obj->align.padding_top +
--      obj->align.padding_right + obj->align.padding_bottom == 0) {
--    GST_DEBUG_OBJECT (obj->dbg_obj, "no cropping needed");
--    return TRUE;
-+  st = gst_caps_get_structure (caps, 0);
-+  if (gst_structure_has_field (st, "display_width")) {
-+    gst_structure_get_int(st, "display_width", &crop.c.width);
-+  }
-+
-+  if (gst_structure_has_field (st, "display_height")) {
-+    gst_structure_get_int(st, "display_height", &crop.c.height);
-   }
- 
-   GST_DEBUG_OBJECT (obj->dbg_obj,
-diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h
-index 92f22a74cac0..4462fdeba644 100644
---- a/sys/v4l2/gstv4l2object.h
-+++ b/sys/v4l2/gstv4l2object.h
-@@ -303,7 +303,7 @@ GstCaps *    gst_v4l2_object_get_caps    (GstV4l2Object * v4l2object, GstCaps *
- 
- gboolean     gst_v4l2_object_acquire_format (GstV4l2Object * v4l2object, GstVideoInfo * info);
- 
--gboolean     gst_v4l2_object_set_crop    (GstV4l2Object * obj);
-+gboolean     gst_v4l2_object_set_crop    (GstV4l2Object * obj, GstCaps * caps);
- 
- gboolean     gst_v4l2_object_decide_allocation (GstV4l2Object * v4l2object, GstQuery * query);
- 
-diff --git a/sys/v4l2/gstv4l2transform.c b/sys/v4l2/gstv4l2transform.c
-index a9294e233b5b..b8990632a60d 100644
---- a/sys/v4l2/gstv4l2transform.c
-+++ b/sys/v4l2/gstv4l2transform.c
-@@ -220,10 +220,10 @@ gst_v4l2_transform_set_caps (GstBaseTransform * trans, GstCaps * incaps,
-     goto outcaps_failed;
- 
-   /* FIXME implement fallback if crop not supported */
--  if (!gst_v4l2_object_set_crop (self->v4l2output))
-+  if (!gst_v4l2_object_set_crop (self->v4l2output, outcaps))
-     goto failed;
- 
--  if (!gst_v4l2_object_set_crop (self->v4l2capture))
-+  if (!gst_v4l2_object_set_crop (self->v4l2capture, incaps))
-     goto failed;
- 
-   return TRUE;
--- 
-2.28.0
-
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index e505e64..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1,5 +0,0 @@
-0001-mtk.patch
-0002-v4l2convert.patch
-0003-fix-wrong-format-set-for-GRAY16_BE.patch
-0004-Add-support-for-non-continuous-MT21-format.patch
-0005-use-display_-width-height-for-cropping-instead-of-wi.patch
diff --git a/debian/rules b/debian/rules
index 6842368..0fc9a67 100755
--- a/debian/rules
+++ b/debian/rules
@@ -5,6 +5,10 @@
 include /usr/share/cdbs/1/rules/utils.mk
 include /usr/share/cdbs/1/rules/autoreconf.mk
 
+# Work-around for gtk-doc bug:
+# https://bugzilla.gnome.org/show_bug.cgi?id=783926
+export PYTHONIOENCODING="utf-8"
+
 DEB_BUILD_PARALLEL = 1
 
 DEB_DH_AUTORECONF_ARGS += --as-needed
@@ -77,7 +81,6 @@
 PLUGINS +=
 endif
 VERSIONIZE= \
-	plugins-good-doc.install \
 
 ifeq ($(DEB_HOST_ARCH_OS),linux)
 1394 = debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/gstreamer-$(gst_abi)/libgst1394.so
@@ -90,6 +93,16 @@
 oss4 = debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/gstreamer-$(gst_abi)/libgstoss4.so
 endif
 
+
+# workaround for mesa headers being broken (#894076)
+ifeq ($(DEB_HOST_ARCH),armel)
+CONFIG_ARGS += --disable-qt
+endif
+ifeq ($(DEB_HOST_ARCH),armhf)
+CONFIG_ARGS += --disable-qt
+endif
+CONFIG_ARGS += --disable-qt
+
 ifeq ($(DEB_HOST_ARCH_OS),linux)
 DEFAULT_AUDIOSINK = autoaudiosink
 DEFAULT_AUDIOSRC = autoaudiosrc
@@ -104,22 +117,7 @@
 DEFAULT_VISUALIZER = goom
 endif
 
-# Let's decide the package name and url depending on the distribution
-DISTRO = "$(shell dpkg-vendor --query vendor)"
-
-GST_PACKAGE_NAME := "GStreamer Good Plugins (unknown Debian derivative)"
-GST_PACKAGE_ORIGIN="http://packages.qa.debian.org/gst-plugins-good$(gst_abi)"
-
-ifeq ($(DISTRO),"Debian")
-GST_PACKAGE_NAME := "GStreamer Good Plugins (Debian)"
-GST_PACKAGE_ORIGIN="http://packages.qa.debian.org/gst-plugins-good$(gst_abi)"
-endif
-
-ifeq ($(DISTRO),"Ubuntu")
-GST_PACKAGE_NAME := "GStreamer Good Plugins (Ubuntu)"
-GST_PACKAGE_ORIGIN="https://launchpad.net/distros/ubuntu/+source/gst-plugins-good$(gst_abi)"
-endif
-
+GST_PACKAGE_NAME := "GStreamer Good Plugins"
 
 # setup links for packages
 pre-build::
@@ -147,7 +145,6 @@
 	--enable-DEBUG \
 	--enable-debug \
 	--with-package-name=$(GST_PACKAGE_NAME) \
-	--with-package-origin=$(GST_PACKAGE_ORIGIN) \
 	--disable-gtk-doc \
 	--enable-experimental \
 	--with-default-audiosink=$(DEFAULT_AUDIOSINK) \
diff --git a/debian/source.lintian-overrides b/debian/source.lintian-overrides
new file mode 100644
index 0000000..4516499
--- /dev/null
+++ b/debian/source.lintian-overrides
@@ -0,0 +1,2 @@
+mtk-gst-plugins-good source: debian-rules-sets-dpkg-architecture-variable *
+
diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides
deleted file mode 100644
index f5ecee6..0000000
--- a/debian/source/lintian-overrides
+++ /dev/null
@@ -1 +0,0 @@
-gst-plugins-good1.0 source: debian-rules-sets-dpkg-architecture-variable *
\ No newline at end of file
diff --git a/debian/watch b/debian/watch
deleted file mode 100644
index 0acdd96..0000000
--- a/debian/watch
+++ /dev/null
@@ -1,2 +0,0 @@
-version=3
-http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-(1\.[\d\.]+)\.tar\.xz
